Skip to content

Commit 57d390b

Browse files
committed
zap irfft support for PDL::Complex
1 parent 812287f commit 57d390b

File tree

3 files changed

+18
-38
lines changed

3 files changed

+18
-38
lines changed

README.pod

+1-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ a single-precision floating point transform (and return data of that type).
137137
fft1( $x->byte )
138138

139139
As of 0.20, this module expects complex numbers to be stored as "native
140-
complex" types (C<cfloat>, C<cdouble>). Outputs will also be native
140+
complex" types (C<cfloat>, C<cdouble>). Complex outputs will also be native
141141
complex.
142142

143143
Generally, the sizes of the input and the output must match. This is completely

fftw3.pd

+1-21
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ EOF
317317
($is_native && !$is_real_fft) ? 'N' :
318318
!$is_real_fft ? '' :
319319
($is_native && $do_inverse_fft) ? 'irN' :
320-
$do_inverse_fft ? 'ir' :
320+
$do_inverse_fft ? barf("irfft no longer supports PDL::Complex") :
321321
($is_native_output) ? 'rN' :
322322
'r';
323323
$internal_function .= "fft$rank";
@@ -755,26 +755,6 @@ EOF
755755
$pp_def{Code} = $code_real_forward;
756756
pp_def( "__rfft$rank", %pp_def );
757757

758-
# backward
759-
# I have the complex dimensions. Have nhalf, but not n1
760-
#
761-
# if we're not given an output, there's an ambiguity. I want
762-
# int($out->dim(0)/2) + 1 != $in->dim(1),
763-
# however this could mean that
764-
# $out->dim(0) = 2*$in->dim(1) - 2
765-
# or
766-
# $out->dim(0) = 2*$in->dim(1) - 1
767-
#
768-
# WITHOUT ANY OTHER INFORMATION, I ASSUME EVEN INPUT SIZES, SO I ASSUME
769-
# $out->dim(0) = 2*$in->dim(1) - 2
770-
$pp_def{RedoDimsCode} = <<'EOF';
771-
if( $PDL(real)->dims[0] <= 0 )
772-
$SIZE(n1) = 2*$PDL(complexv)->dims[1] - 2;
773-
EOF
774-
$pp_def{Pars} = "complexv($dims_complex_string); [o]real($dims_real_string);";
775-
$pp_def{Code} = $code_real_backward;
776-
pp_def( "__irfft$rank", %pp_def );
777-
778758
################################################################################
779759
####### now native-complex version
780760
shift @dims; # drop the (real,imag) dim

t/fftw.t

+16-16
Original file line numberDiff line numberDiff line change
@@ -602,29 +602,29 @@ my $Nplans = 0;
602602

603603

604604
# backward
605-
my $x64_back = irfft2($x64_ref->slice(':,0:3,:') );
605+
my $x64_back = irfft2(PDL::czip($x64_ref->slice(':,0:3,:')->using(0,1)) );
606606
ok_should_make_plan( all( approx( $x64, $x64_back, approx_eps_double) ),
607607
"rfft 2d test - backward - 6,4 - output returned" );
608608

609609
$x64_back = zeros(6,4);
610-
irfft2($x64_ref->slice(':,0:3,:'), $x64_back );
610+
irfft2(PDL::czip($x64_ref->slice(':,0:3,:')->using(0,1)), $x64_back );
611611
ok_should_reuse_plan( all( approx( $x64, $x64_back, approx_eps_double) ),
612612
"rfft 2d test - backward - 6,4 - output in arglist" );
613613

614-
my $x65_back = irfft2($x65_ref->slice(':,0:3,:') );
614+
my $x65_back = irfft2(PDL::czip($x65_ref->slice(':,0:3,:')->using(0,1)) );
615615
ok_should_make_plan( all( approx( $x65, $x65_back, approx_eps_double) ),
616616
"rfft 2d test - backward - 6,5 - output returned" );
617617

618618
$x65_back = zeros(6,5);
619-
irfft2($x65_ref->slice(':,0:3,:'), $x65_back );
619+
irfft2(PDL::czip($x65_ref->slice(':,0:3,:')->using(0,1)), $x65_back );
620620
ok_should_reuse_plan( all( approx( $x65, $x65_back, approx_eps_double) ),
621621
"rfft 2d test - backward - 6,5 - output in arglist" );
622622

623-
my $x74_back = irfft2($x74_ref->slice(':,0:3,:'), zeros(7,4) );
623+
my $x74_back = irfft2(PDL::czip($x74_ref->slice(':,0:3,:')->using(0,1)), zeros(7,4) );
624624
ok_should_make_plan( all( approx( $x74, $x74_back, approx_eps_double) ),
625625
"rfft 2d test - backward - 7,4" );
626626

627-
my $x75_back = irfft2($x75_ref->slice(':,0:3,:'), zeros(7,5) );
627+
my $x75_back = irfft2(PDL::czip($x75_ref->slice(':,0:3,:')->using(0,1)), zeros(7,5) );
628628
ok_should_make_plan( all( approx( $x75, $x75_back, approx_eps_double) ),
629629
"rfft 2d test - backward - 7,5" );
630630
}
@@ -639,7 +639,7 @@ my $Nplans = 0;
639639
}
640640

641641
{
642-
eval { irfft1( sequence(2,4) ) };
642+
eval { irfft1( sequence(cdouble,4) ) };
643643
ok_should_reuse_plan( ! $@, "real ffts shouldn't work inplace - baseline backward" );
644644
eval { irfft1( inplace sequence(2,4) ) };
645645
ok( $@, "real ffts shouldn't work inplace - backward" );
@@ -669,7 +669,7 @@ my $Nplans = 0;
669669
eval { rfft4( sequence(5,4,4) ) };
670670
ok( $@, "real dimensionality: too few dimensions should fail" );
671671

672-
eval { irfft4( sequence(2,5,3,4,4) ) };
672+
eval { irfft4( sequence(cdouble,5,3,4,4) ) };
673673
ok_should_make_plan( ! $@, "real-backward dimensionality baseline" );
674674

675675
eval { irfft4( sequence(5,4,4) ) };
@@ -700,28 +700,28 @@ my $Nplans = 0;
700700
}
701701

702702
{
703-
eval { irfft4( sequence(2,3,3,4,4) ) };
703+
eval { irfft4( sequence(cdouble,3,3,4,4) ) };
704704
ok_should_make_plan( ! $@, "real-backward dimensionality baseline 1" );
705705

706-
eval { irfft4( sequence(2,3,3,4,4), sequence(5,3,4,4) ) };
706+
eval { irfft4( sequence(cdouble,3,3,4,4), sequence(5,3,4,4) ) };
707707
ok_should_make_plan( ! $@, "real-backward dimensionality baseline 2" );
708708

709-
eval { irfft4( sequence(2,3,3,4,4), sequence(5,3,4,4,3) ) };
709+
eval { irfft4( sequence(cdouble,3,3,4,4), sequence(5,3,4,4,3) ) };
710710
ok_should_reuse_plan( ! $@, "real-backward dimensionality baseline - extra dims should be ok" );
711711

712712
eval { irfft4( sequence(3,3,3,4,4,3), sequence(5,3,4,4) ) };
713713
ok( $@, "real-backward dimensionality - input should look like complex numbers" );
714714

715-
eval { irfft4( sequence(2,3,3,4,3), sequence(5,3,4,4) ) };
715+
eval { irfft4( sequence(cdouble,3,3,4,3), sequence(5,3,4,4) ) };
716716
ok( $@, "real-backward dimensionality - different dims should break 1" );
717717

718-
eval { irfft4( sequence(2,3,3,4,5), sequence(5,3,4,4) ) };
718+
eval { irfft4( sequence(cdouble,3,3,4,5), sequence(5,3,4,4) ) };
719719
ok( $@, "real-backward dimensionality - different dims should break 2" );
720720

721-
eval { irfft4( sequence(2,3,3,4,4), sequence(4,3,4,4) ) };
721+
eval { irfft4( sequence(cdouble,3,3,4,4), sequence(4,3,4,4) ) };
722722
ok_should_reuse_plan( !$@, "real-backward dimensionality - slightly different complex dims still ok" );
723723

724-
eval { irfft4( sequence(2,3,3,4,4), sequence(6,3,4,4) ) };
724+
eval { irfft4( sequence(cdouble,3,3,4,4), sequence(6,3,4,4) ) };
725725
ok( $@, "real-backward dimensionality - too different complex dims should break" );
726726
}
727727
}
@@ -793,7 +793,7 @@ my $Nplans = 0;
793793
"parameterized forward real FFT works (1d on a 3d var)" );
794794

795795
# inverse on 2d -- should be a normalized forward on the non-transformed direction
796-
$c = irfftn($b,2);
796+
$c = irfftn(PDL::czip($b->using(0,1)),2);
797797
$ctemplate = zeroes($a);
798798
$ctemplate->slice('(0),:,(0)') .= 0.25;
799799
ok_should_make_plan( all( approx( $c, $ctemplate, approx_eps_double) ),

0 commit comments

Comments
 (0)