@@ -219,6 +219,7 @@ for f in (:leg2cheb, :cheb2leg, :ultra2ultra, :jac2jac,
219
219
plan_f = Symbol (" plan_" , f)
220
220
@eval begin
221
221
$ plan_f (x:: AbstractArray{T} , y... ; z... ) where T = $ plan_f (T, size (x, 1 ), y... ; z... )
222
+ $ plan_f (x:: AbstractArray{Complex{T}} , y... ; z... ) where T <: Real = $ plan_f (T, size (x, 1 ), y... ; z... )
222
223
$ f (x:: AbstractArray , y... ; z... ) = $ plan_f (x, y... ; z... )* x
223
224
end
224
225
end
@@ -242,47 +243,47 @@ function plan_cheb2leg(::Type{Float32}, n::Integer; normcheb::Bool=false, normle
242
243
return FTPlan {Float32, 1, CHEB2LEG} (plan, n)
243
244
end
244
245
245
- function plan_ultra2ultra (:: Type{Float32} , n:: Integer , λ:: Float32 , μ:: Float32 ; norm1:: Bool = false , norm2:: Bool = false )
246
+ function plan_ultra2ultra (:: Type{Float32} , n:: Integer , λ, μ; norm1:: Bool = false , norm2:: Bool = false )
246
247
plan = ccall ((:ft_plan_ultraspherical_to_ultrasphericalf , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32, Float32), norm1, norm2, n, λ, μ)
247
248
return FTPlan {Float32, 1, ULTRA2ULTRA} (plan, n)
248
249
end
249
250
250
- function plan_jac2jac (:: Type{Float32} , n:: Integer , α:: Float32 , β:: Float32 , γ:: Float32 , δ:: Float32 ; norm1:: Bool = false , norm2:: Bool = false )
251
+ function plan_jac2jac (:: Type{Float32} , n:: Integer , α, β, γ, δ; norm1:: Bool = false , norm2:: Bool = false )
251
252
plan = ccall ((:ft_plan_jacobi_to_jacobif , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32, Float32, Float32, Float32), norm1, norm2, n, α, β, γ, δ)
252
253
return FTPlan {Float32, 1, JAC2JAC} (plan, n)
253
254
end
254
255
255
- function plan_lag2lag (:: Type{Float32} , n:: Integer , α:: Float32 , β:: Float32 ; norm1:: Bool = false , norm2:: Bool = false )
256
+ function plan_lag2lag (:: Type{Float32} , n:: Integer , α, β; norm1:: Bool = false , norm2:: Bool = false )
256
257
plan = ccall ((:ft_plan_laguerre_to_laguerref , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32, Float32), norm1, norm2, n, α, β)
257
258
return FTPlan {Float32, 1, LAG2LAG} (plan, n)
258
259
end
259
260
260
- function plan_jac2ultra (:: Type{Float32} , n:: Integer , α:: Float32 , β:: Float32 , λ:: Float32 ; normjac:: Bool = false , normultra:: Bool = false )
261
+ function plan_jac2ultra (:: Type{Float32} , n:: Integer , α, β, λ; normjac:: Bool = false , normultra:: Bool = false )
261
262
plan = ccall ((:ft_plan_jacobi_to_ultrasphericalf , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32, Float32, Float32), normjac, normultra, n, α, β, λ)
262
263
return FTPlan {Float32, 1, JAC2ULTRA} (plan, n)
263
264
end
264
265
265
- function plan_ultra2jac (:: Type{Float32} , n:: Integer , λ:: Float32 , α:: Float32 , β:: Float32 ; normultra:: Bool = false , normjac:: Bool = false )
266
+ function plan_ultra2jac (:: Type{Float32} , n:: Integer , λ, α, β; normultra:: Bool = false , normjac:: Bool = false )
266
267
plan = ccall ((:ft_plan_ultraspherical_to_jacobif , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32, Float32, Float32), normultra, normjac, n, λ, α, β)
267
268
return FTPlan {Float32, 1, ULTRA2JAC} (plan, n)
268
269
end
269
270
270
- function plan_jac2cheb (:: Type{Float32} , n:: Integer , α:: Float32 , β:: Float32 ; normjac:: Bool = false , normcheb:: Bool = false )
271
+ function plan_jac2cheb (:: Type{Float32} , n:: Integer , α, β; normjac:: Bool = false , normcheb:: Bool = false )
271
272
plan = ccall ((:ft_plan_jacobi_to_chebyshevf , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32, Float32), normjac, normcheb, n, α, β)
272
273
return FTPlan {Float32, 1, JAC2CHEB} (plan, n)
273
274
end
274
275
275
- function plan_cheb2jac (:: Type{Float32} , n:: Integer , α:: Float32 , β:: Float32 ; normcheb:: Bool = false , normjac:: Bool = false )
276
+ function plan_cheb2jac (:: Type{Float32} , n:: Integer , α, β; normcheb:: Bool = false , normjac:: Bool = false )
276
277
plan = ccall ((:ft_plan_chebyshev_to_jacobif , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32, Float32), normcheb, normjac, n, α, β)
277
278
return FTPlan {Float32, 1, CHEB2JAC} (plan, n)
278
279
end
279
280
280
- function plan_ultra2cheb (:: Type{Float32} , n:: Integer , λ:: Float32 ; normultra:: Bool = false , normcheb:: Bool = false )
281
+ function plan_ultra2cheb (:: Type{Float32} , n:: Integer , λ; normultra:: Bool = false , normcheb:: Bool = false )
281
282
plan = ccall ((:ft_plan_ultraspherical_to_chebyshevf , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32), normultra, normcheb, n, λ)
282
283
return FTPlan {Float32, 1, ULTRA2CHEB} (plan, n)
283
284
end
284
285
285
- function plan_cheb2ultra (:: Type{Float32} , n:: Integer , λ:: Float32 ; normcheb:: Bool = false , normultra:: Bool = false )
286
+ function plan_cheb2ultra (:: Type{Float32} , n:: Integer , λ; normcheb:: Bool = false , normultra:: Bool = false )
286
287
plan = ccall ((:ft_plan_chebyshev_to_ultrasphericalf , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float32), normcheb, normultra, n, λ)
287
288
return FTPlan {Float32, 1, CHEB2ULTRA} (plan, n)
288
289
end
@@ -298,47 +299,47 @@ function plan_cheb2leg(::Type{Float64}, n::Integer; normcheb::Bool=false, normle
298
299
return FTPlan {Float64, 1, CHEB2LEG} (plan, n)
299
300
end
300
301
301
- function plan_ultra2ultra (:: Type{Float64} , n:: Integer , λ:: Float64 , μ:: Float64 ; norm1:: Bool = false , norm2:: Bool = false )
302
+ function plan_ultra2ultra (:: Type{Float64} , n:: Integer , λ, μ; norm1:: Bool = false , norm2:: Bool = false )
302
303
plan = ccall ((:ft_plan_ultraspherical_to_ultraspherical , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64, Float64), norm1, norm2, n, λ, μ)
303
304
return FTPlan {Float64, 1, ULTRA2ULTRA} (plan, n)
304
305
end
305
306
306
- function plan_jac2jac (:: Type{Float64} , n:: Integer , α:: Float64 , β:: Float64 , γ:: Float64 , δ:: Float64 ; norm1:: Bool = false , norm2:: Bool = false )
307
+ function plan_jac2jac (:: Type{Float64} , n:: Integer , α, β, γ, δ; norm1:: Bool = false , norm2:: Bool = false )
307
308
plan = ccall ((:ft_plan_jacobi_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64, Float64, Float64, Float64), norm1, norm2, n, α, β, γ, δ)
308
309
return FTPlan {Float64, 1, JAC2JAC} (plan, n)
309
310
end
310
311
311
- function plan_lag2lag (:: Type{Float64} , n:: Integer , α:: Float64 , β:: Float64 ; norm1:: Bool = false , norm2:: Bool = false )
312
+ function plan_lag2lag (:: Type{Float64} , n:: Integer , α, β; norm1:: Bool = false , norm2:: Bool = false )
312
313
plan = ccall ((:ft_plan_laguerre_to_laguerre , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64, Float64), norm1, norm2, n, α, β)
313
314
return FTPlan {Float64, 1, LAG2LAG} (plan, n)
314
315
end
315
316
316
- function plan_jac2ultra (:: Type{Float64} , n:: Integer , α:: Float64 , β:: Float64 , λ:: Float64 ; normjac:: Bool = false , normultra:: Bool = false )
317
+ function plan_jac2ultra (:: Type{Float64} , n:: Integer , α, β, λ; normjac:: Bool = false , normultra:: Bool = false )
317
318
plan = ccall ((:ft_plan_jacobi_to_ultraspherical , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64, Float64, Float64), normjac, normultra, n, α, β, λ)
318
319
return FTPlan {Float64, 1, JAC2ULTRA} (plan, n)
319
320
end
320
321
321
- function plan_ultra2jac (:: Type{Float64} , n:: Integer , λ:: Float64 , α:: Float64 , β:: Float64 ; normultra:: Bool = false , normjac:: Bool = false )
322
+ function plan_ultra2jac (:: Type{Float64} , n:: Integer , λ, α, β; normultra:: Bool = false , normjac:: Bool = false )
322
323
plan = ccall ((:ft_plan_ultraspherical_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64, Float64, Float64), normultra, normjac, n, λ, α, β)
323
324
return FTPlan {Float64, 1, ULTRA2JAC} (plan, n)
324
325
end
325
326
326
- function plan_jac2cheb (:: Type{Float64} , n:: Integer , α:: Float64 , β:: Float64 ; normjac:: Bool = false , normcheb:: Bool = false )
327
+ function plan_jac2cheb (:: Type{Float64} , n:: Integer , α, β; normjac:: Bool = false , normcheb:: Bool = false )
327
328
plan = ccall ((:ft_plan_jacobi_to_chebyshev , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64, Float64), normjac, normcheb, n, α, β)
328
329
return FTPlan {Float64, 1, JAC2CHEB} (plan, n)
329
330
end
330
331
331
- function plan_cheb2jac (:: Type{Float64} , n:: Integer , α:: Float64 , β:: Float64 ; normcheb:: Bool = false , normjac:: Bool = false )
332
+ function plan_cheb2jac (:: Type{Float64} , n:: Integer , α, β; normcheb:: Bool = false , normjac:: Bool = false )
332
333
plan = ccall ((:ft_plan_chebyshev_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64, Float64), normcheb, normjac, n, α, β)
333
334
return FTPlan {Float64, 1, CHEB2JAC} (plan, n)
334
335
end
335
336
336
- function plan_ultra2cheb (:: Type{Float64} , n:: Integer , λ:: Float64 ; normultra:: Bool = false , normcheb:: Bool = false )
337
+ function plan_ultra2cheb (:: Type{Float64} , n:: Integer , λ; normultra:: Bool = false , normcheb:: Bool = false )
337
338
plan = ccall ((:ft_plan_ultraspherical_to_chebyshev , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64), normultra, normcheb, n, λ)
338
339
return FTPlan {Float64, 1, ULTRA2CHEB} (plan, n)
339
340
end
340
341
341
- function plan_cheb2ultra (:: Type{Float64} , n:: Integer , λ:: Float64 ; normcheb:: Bool = false , normultra:: Bool = false )
342
+ function plan_cheb2ultra (:: Type{Float64} , n:: Integer , λ; normcheb:: Bool = false , normultra:: Bool = false )
342
343
plan = ccall ((:ft_plan_chebyshev_to_ultraspherical , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Float64), normcheb, normultra, n, λ)
343
344
return FTPlan {Float64, 1, CHEB2ULTRA} (plan, n)
344
345
end
@@ -354,47 +355,47 @@ function plan_cheb2leg(::Type{BigFloat}, n::Integer; normcheb::Bool=false, norml
354
355
return FTPlan {BigFloat, 1, CHEB2LEG} (plan, n)
355
356
end
356
357
357
- function plan_ultra2ultra (:: Type{BigFloat} , n:: Integer , λ:: BigFloat , μ:: BigFloat ; norm1:: Bool = false , norm2:: Bool = false )
358
+ function plan_ultra2ultra (:: Type{BigFloat} , n:: Integer , λ, μ; norm1:: Bool = false , norm2:: Bool = false )
358
359
plan = ccall ((:ft_mpfr_plan_ultraspherical_to_ultraspherical , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Ref{BigFloat}, Clong, Int32), norm1, norm2, n, λ, μ, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
359
360
return FTPlan {BigFloat, 1, ULTRA2ULTRA} (plan, n)
360
361
end
361
362
362
- function plan_jac2jac (:: Type{BigFloat} , n:: Integer , α:: BigFloat , β:: BigFloat , γ:: BigFloat , δ:: BigFloat ; norm1:: Bool = false , norm2:: Bool = false )
363
+ function plan_jac2jac (:: Type{BigFloat} , n:: Integer , α, β, γ, δ; norm1:: Bool = false , norm2:: Bool = false )
363
364
plan = ccall ((:ft_mpfr_plan_jacobi_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Ref{BigFloat}, Ref{BigFloat}, Ref{BigFloat}, Clong, Int32), norm1, norm2, n, α, β, γ, δ, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
364
365
return FTPlan {BigFloat, 1, JAC2JAC} (plan, n)
365
366
end
366
367
367
- function plan_lag2lag (:: Type{BigFloat} , n:: Integer , α:: BigFloat , β:: BigFloat ; norm1:: Bool = false , norm2:: Bool = false )
368
+ function plan_lag2lag (:: Type{BigFloat} , n:: Integer , α, β; norm1:: Bool = false , norm2:: Bool = false )
368
369
plan = ccall ((:ft_mpfr_plan_laguerre_to_laguerre , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Ref{BigFloat}, Clong, Int32), norm1, norm2, n, α, β, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
369
370
return FTPlan {BigFloat, 1, LAG2LAG} (plan, n)
370
371
end
371
372
372
- function plan_jac2ultra (:: Type{BigFloat} , n:: Integer , α:: BigFloat , β:: BigFloat , λ:: BigFloat ; normjac:: Bool = false , normultra:: Bool = false )
373
+ function plan_jac2ultra (:: Type{BigFloat} , n:: Integer , α, β, λ; normjac:: Bool = false , normultra:: Bool = false )
373
374
plan = ccall ((:ft_mpfr_plan_jacobi_to_ultraspherical , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Ref{BigFloat}, Ref{BigFloat}, Clong, Int32), normjac, normultra, n, α, β, λ, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
374
375
return FTPlan {BigFloat, 1, JAC2ULTRA} (plan, n)
375
376
end
376
377
377
- function plan_ultra2jac (:: Type{BigFloat} , n:: Integer , λ:: BigFloat , α:: BigFloat , β:: BigFloat ; normultra:: Bool = false , normjac:: Bool = false )
378
+ function plan_ultra2jac (:: Type{BigFloat} , n:: Integer , λ, α, β; normultra:: Bool = false , normjac:: Bool = false )
378
379
plan = ccall ((:ft_mpfr_plan_ultraspherical_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Ref{BigFloat}, Ref{BigFloat}, Clong, Int32), normultra, normjac, n, λ, α, β, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
379
380
return FTPlan {BigFloat, 1, ULTRA2JAC} (plan, n)
380
381
end
381
382
382
- function plan_jac2cheb (:: Type{BigFloat} , n:: Integer , α:: BigFloat , β:: BigFloat ; normjac:: Bool = false , normcheb:: Bool = false )
383
+ function plan_jac2cheb (:: Type{BigFloat} , n:: Integer , α, β; normjac:: Bool = false , normcheb:: Bool = false )
383
384
plan = ccall ((:ft_mpfr_plan_jacobi_to_chebyshev , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Ref{BigFloat}, Clong, Int32), normjac, normcheb, n, α, β, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
384
385
return FTPlan {BigFloat, 1, JAC2CHEB} (plan, n)
385
386
end
386
387
387
- function plan_cheb2jac (:: Type{BigFloat} , n:: Integer , α:: BigFloat , β:: BigFloat ; normcheb:: Bool = false , normjac:: Bool = false )
388
+ function plan_cheb2jac (:: Type{BigFloat} , n:: Integer , α, β; normcheb:: Bool = false , normjac:: Bool = false )
388
389
plan = ccall ((:ft_mpfr_plan_chebyshev_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Ref{BigFloat}, Clong, Int32), normcheb, normjac, n, α, β, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
389
390
return FTPlan {BigFloat, 1, CHEB2JAC} (plan, n)
390
391
end
391
392
392
- function plan_ultra2cheb (:: Type{BigFloat} , n:: Integer , λ:: BigFloat ; normultra:: Bool = false , normcheb:: Bool = false )
393
+ function plan_ultra2cheb (:: Type{BigFloat} , n:: Integer , λ; normultra:: Bool = false , normcheb:: Bool = false )
393
394
plan = ccall ((:ft_mpfr_plan_ultraspherical_to_chebyshev , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Clong, Int32), normultra, normcheb, n, λ, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
394
395
return FTPlan {BigFloat, 1, ULTRA2CHEB} (plan, n)
395
396
end
396
397
397
- function plan_cheb2ultra (:: Type{BigFloat} , n:: Integer , λ:: BigFloat ; normcheb:: Bool = false , normultra:: Bool = false )
398
+ function plan_cheb2ultra (:: Type{BigFloat} , n:: Integer , λ; normcheb:: Bool = false , normultra:: Bool = false )
398
399
plan = ccall ((:ft_mpfr_plan_chebyshev_to_ultraspherical , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Ref{BigFloat}, Clong, Int32), normcheb, normultra, n, λ, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
399
400
return FTPlan {BigFloat, 1, CHEB2ULTRA} (plan, n)
400
401
end
@@ -415,12 +416,12 @@ function plan_disk2cxf(::Type{Float64}, n::Integer)
415
416
return FTPlan {Float64, 2, DISK} (plan, n)
416
417
end
417
418
418
- function plan_tri2cheb (:: Type{Float64} , n:: Integer , α:: Float64 , β:: Float64 , γ:: Float64 )
419
+ function plan_tri2cheb (:: Type{Float64} , n:: Integer , α, β, γ)
419
420
plan = ccall ((:ft_plan_tri2cheb , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Float64, Float64, Float64), n, α, β, γ)
420
421
return FTPlan {Float64, 2, TRIANGLE} (plan, n)
421
422
end
422
423
423
- function plan_tet2cheb (:: Type{Float64} , n:: Integer , α:: Float64 , β:: Float64 , γ:: Float64 , δ:: Float64 )
424
+ function plan_tet2cheb (:: Type{Float64} , n:: Integer , α, β, γ, δ)
424
425
plan = ccall ((:ft_plan_tet2cheb , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Float64, Float64, Float64, Float64), n, α, β, γ, δ)
425
426
return FTPlan {Float64, 3, TETRAHEDRON} (plan, n)
426
427
end
@@ -621,3 +622,27 @@ function ldiv!(p::FTPlan{Float64, 3, TETRAHEDRON}, x::Array{Float64, 3})
621
622
ccall ((:ft_execute_cheb2tet , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint, Cint), p, x, size (x, 1 ), size (x, 2 ), size (x, 3 ))
622
623
return x
623
624
end
625
+
626
+ * (p:: FTPlan{T} , x:: Array{Complex{T}} ) where T = lmul! (p, deepcopy (x))
627
+ * (p:: AdjointFTPlan{T} , x:: Array{Complex{T}} ) where T = lmul! (p, deepcopy (x))
628
+ * (p:: TransposeFTPlan{T} , x:: Array{Complex{T}} ) where T = lmul! (p, deepcopy (x))
629
+ \ (p:: FTPlan{T} , x:: Array{Complex{T}} ) where T = ldiv! (p, deepcopy (x))
630
+ \ (p:: AdjointFTPlan{T} , x:: Array{Complex{T}} ) where T = ldiv! (p, deepcopy (x))
631
+ \ (p:: TransposeFTPlan{T} , x:: Array{Complex{T}} ) where T = ldiv! (p, deepcopy (x))
632
+
633
+ for fJ in (:lmul! , :ldiv! )
634
+ @eval begin
635
+ function $fJ (p:: FTPlan{T} , x:: AbstractArray{Complex{T}} ) where T
636
+ x .= complex .($ fJ (p, real (x)), $ fJ (p, imag (x)))
637
+ return x
638
+ end
639
+ function $fJ (p:: AdjointFTPlan{T, FTPlan{T, N, K}} , x:: AbstractArray{Complex{T}} ) where {T, N, K}
640
+ x .= complex .($ fJ (p, real (x)), $ fJ (p, imag (x)))
641
+ return x
642
+ end
643
+ function $fJ (p:: TransposeFTPlan{T, FTPlan{T, N, K}} , x:: AbstractArray{Complex{T}} ) where {T, N, K}
644
+ x .= complex .($ fJ (p, real (x)), $ fJ (p, imag (x)))
645
+ return x
646
+ end
647
+ end
648
+ end
0 commit comments