Version history =============== **v2025.1.1** - Change the name f_matrix attribute of NUDFT to f_matrices **v2022.2.4rc1** - Explain the scaling factor for NUFFT.adjoint in the document. **v2022.2.3** - Same as v2022.2.3rc2 **v2022.2.3-rc2** - Add experimental NUFFT_cupy for cupy backend. - Change scipy.linalg.pinv2 (deprecate) to pinv. Track for possible errors. **v2022.2.3-rc1** - Add experimental NUFFT_torch, NUFFT_tf **v2022.2.2** - Maintenance release **v2022.2.1** - Maintenance release **v2022.1.1** - some typos fixed. - move to Python 3.10 - update installation for MSVC 2022 and Win 10 **v2021.2.0** - typo fixed: ocl_add() imaglptr -> imagptr **v2021.1.0** - removed twosum algorithm. **v2020.2.1** - tested with an AMD card. - Deprecate batch as this is not the most essential function in NUFFT. - Deprecate NUFFT_cpu, NUFFT_hsa - Update some docs. **v2020.1.2** - new_index: change the khatri_rao_k(), OMEGA_k() in helper.py; col += kindx[index];// + 1 - Add code of conduct of Contributor Covenant v2.0 - Update some documentations **v2020.1.0** - add batch mode to nudft_cpu **v2020.0.0** - fix batch=1. This can cause error in Riekna fft. **v2019.2.3** -(experimental) Add the unified NUFFT() class. Now CPU, GPU, and legacy GPU mode are encapsuled in a single class. -Tested using Intel Neo OpenCL driver (see https://github.com/intel/compute-runtime) and IntelPython3. -The old NUFFT_cpu() and NUFFT_legacy() will be kept in the system for compatibility. **v2019.2.1-2019.2.2** -Remove lsmr as scipy 1.13 has caused unknown error. **v2019.2.0** - Bump **v2019.1.2** - BUGFIX: fix the loss of accuracy in cSpmvh(). Replace the group/local by global memory (the group/local sizes have caused the unknown run-time behaviour on cuda) **v2019.1.1** - Refactor the re_subroutine.py - Adopt tensor form **v0.4.0.0** - 0.4.0.0 is a beta version. - Major updates for the NUFFT_hsa class, including memory reduction and split-radix. Multiple NUFFT_hsa() using cuda backend becomes possible, by pushing the context to the top of the stack when a method is called. - Tested in Windows 10 with PyCUDA 2018.1.1, nvidia-driver 417.35, CUDA 9.2, Visual Studio 2015 Community, and Anaconda Python 3.7 64-bit. PyOpenCL in Windows is yet to be tested. - Add batch mode. **v0.3.3.12** - 0.3.3.12 is a bug-fixed version. - Removal of the keyword async for compatibility reasons because Reikna has changed the keyword to async_. **v0.3.3.8** - Bugfix: mm = numpy.tile(mm, [numpy.prod(Jd).astype(int), 1]) to fix the wrong type when numpy.prod(Jd) is not cast as int - Bugfix: fix rcond=None error in Anaconda 3.6.5 and Numpy 1.13.1 (the recommended None in Numpy 1.14 is backward incompatible with 1.13) - Bugfix: indx1 = indx.copy() is replaced by indx1 = list(indx) for Python2 compatibility **v0.3.3.7** - Bugfix in 0.3.3.7 Toeplitz is removed from the NUFFT_cpu and NUFFT_gpu to avoid the MemoryError. **v0.3.3.6** - Bugfix: correct the error of import. Now import NUFFT_cpu, NUFFT_hsa at the top level. **v0.3.3** - Note: GPU support is superseded by Heterogeneous System Architecture (HSA). - A variety of nonlinear solvers are provided, including the conjugate gradient method (cg), L1 total-variation ordinary least square (L1TVOLS), and L1 total-variation least absolute deviation (L1TVLAD). - The CPU version support other nonlinear solvers, lsqr, gmr, cg, bicgstab, bicg, cgs, gmres, lgmres , apart from cg, L1TVOLS and L1TVLAD. - Support multi-dimensional transform and reconstruction (experimentally). **v0.3.2.9** - Experimental support of NVIDIA's graphic processing unit (GPU). - The experimental class gpuNUFFT requires pycuda, scikit-cuda, and python-cuda-cffi. scikit-cuda can be installed from standard command. **v0.3.2.8** - Tested under Linux and Windows Anaconda3 **v0.3** - Updated setup.py - Removal of pyfftw due to segfault under some Linux distributions