"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "Basic/Primitive/primitive.pd" between
PDL-2.080.tar.gz and PDL-2.081.tar.gz

About: PDL (Perl Data Language) aims to turn perl into an efficient numerical language for scientific computing (similar to IDL and MatLab).

primitive.pd  (PDL-2.080):primitive.pd  (PDL-2.081)
use strict; use strict;
use warnings; use warnings;
use PDL::Types qw(ppdefs_all types); use PDL::Types qw(ppdefs_all types);
my $F = [map $_->ppsym, grep $_->real && !$_->integer, types()]; my $F = [map $_->ppsym, grep $_->real && !$_->integer, types()];
my $AF = [map $_->ppsym, grep !$_->integer, types];
pp_addpm({At=>'Top'},<<'EOD'); pp_addpm({At=>'Top'},<<'EOD');
use strict; use strict;
use warnings; use warnings;
use PDL::Slices; use PDL::Slices;
use Carp; use Carp;
{ package PDL; { package PDL;
use overload ( use overload (
'x' => sub { 'x' => sub {
skipping to change at line 1703 skipping to change at line 1704
%} %}
} }
} }
EOC EOC
Doc =><<'EOD', Doc =><<'EOD',
=for ref =for ref
Enumerate a list of vectors with locally unique keys. Enumerate a list of vectors with locally unique keys.
Given a sorted list of vectors $v, generate a vector $k containing locally uniqu e keys for the elements of $v Given a sorted list of vectors $v, generate a vector $k containing locally uniqu e keys for the elements of $v
(where an "element" is a vector of length $M ocurring in $v). (where an "element" is a vector of length $M occurring in $v).
Note that the keys returned in $k are only unique over a run of a single vector in $v, Note that the keys returned in $k are only unique over a run of a single vector in $v,
so that each unique vector in $v has at least one 0 (zero) index in $k associate d with it. so that each unique vector in $v has at least one 0 (zero) index in $k associate d with it.
If you need global keys, see enumvecg(). If you need global keys, see enumvecg().
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>. Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
EOD EOD
); );
skipping to change at line 1739 skipping to change at line 1740
$k(N=>vn) = ki; $k(N=>vn) = ki;
} }
} }
EOC EOC
Doc =><<'EOD', Doc =><<'EOD',
=for ref =for ref
Enumerate a list of vectors with globally unique keys. Enumerate a list of vectors with globally unique keys.
Given a sorted list of vectors $v, generate a vector $k containing globally uniq ue keys for the elements of $v Given a sorted list of vectors $v, generate a vector $k containing globally uniq ue keys for the elements of $v
(where an "element" is a vector of length $M ocurring in $v). (where an "element" is a vector of length $M occurring in $v).
Basically does the same thing as: Basically does the same thing as:
$k = $v->vsearchvec($v->uniqvec); $k = $v->vsearchvec($v->uniqvec);
... but somewhat more efficiently. ... but somewhat more efficiently.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>. Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
EOD EOD
); );
skipping to change at line 2955 skipping to change at line 2956
); );
} }
############################################################### ###############################################################
# routines somehow related to interpolation # routines somehow related to interpolation
############################################################### ###############################################################
pp_def('interpolate', pp_def('interpolate',
HandleBad => 0, HandleBad => 0,
BadDoc => 'needs major (?) work to handles bad values', BadDoc => 'needs major (?) work to handles bad values',
Pars => 'xi(); x(n); y(n); [o] yi(); int [o] err()', Pars => 'real xi(); real x(n); y(n); [o] yi(); int [o] err()',
GenericTypes => $F, # too restrictive ? GenericTypes => $AF,
PMCode => 'sub PDL::interpolate {
my ($xi, $x, $y, $yi, $err) = @_;
croak "x must be real" if (ref($x) && ! $x->type->real);
croak "xi must be real" if (ref($xi) && ! $xi->type->real
);
$yi //= PDL->null;
$err //= PDL->null;
PDL::_interpolate_int($xi, $x, $y, $yi, $err);
($yi, $err);
}',
Code => ' Code => '
$GENERIC() d; $GENERIC() d;
PDL_Indx n = $SIZE(n); PDL_Indx n = $SIZE(n);
PDL_Indx n1 = n-1; PDL_Indx n1 = n-1;
int up = ($x(n => n1) > $x(n => 0)); int up = ($x(n => n1) > $x(n => 0));
PDL_Indx jl, jh, m; PDL_Indx jl, jh, m;
int carp; int carp;
broadcastloop %{ broadcastloop %{
jl = -1; jl = -1;
skipping to change at line 3019 skipping to change at line 3029
a start for the next search can be faster (compare Numerical Recipes a start for the next search can be faster (compare Numerical Recipes
C<hunt> routine). Feel free to implement that on top of the binary C<hunt> routine). Feel free to implement that on top of the binary
search if you like. For out of bounds values it just does a linear search if you like. For out of bounds values it just does a linear
extrapolation and sets the corresponding element of C<$err> to 1, extrapolation and sets the corresponding element of C<$err> to 1,
which is otherwise 0. which is otherwise 0.
See also L</interpol>, which uses the same routine, See also L</interpol>, which uses the same routine,
differing only in the handling of extrapolation - an error message differing only in the handling of extrapolation - an error message
is printed rather than returning an error ndarray. is printed rather than returning an error ndarray.
Note that C<interpolate> can use complex values for C<$y> and C<$yi> but
C<$x> and C<$xi> must be real.
=cut =cut
EOD EOD
pp_add_exported('', 'interpol'); pp_add_exported('', 'interpol');
pp_addpm(<<'EOD'); pp_addpm(<<'EOD');
=head2 interpol =head2 interpol
=for sig =for sig
 End of changes. 5 change blocks. 
4 lines changed or deleted 18 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)