diff options
Diffstat (limited to 'Master/tlpkg/tlperl.straw/lib/Math/PariInit.pm')
-rwxr-xr-x | Master/tlpkg/tlperl.straw/lib/Math/PariInit.pm | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl.straw/lib/Math/PariInit.pm b/Master/tlpkg/tlperl.straw/lib/Math/PariInit.pm new file mode 100755 index 00000000000..78fb18618cd --- /dev/null +++ b/Master/tlpkg/tlperl.straw/lib/Math/PariInit.pm @@ -0,0 +1,57 @@ +package Math::Pari; + +my %shift = ( k => 10, K => 10, m => 20, M => 20, g => 30, G=> 30); + +sub _human2decimal { + local $_ = shift; + $_ <<= $shift{$1} if s/([kmg])$//i; + $_ +} + +sub Math::PariInit::import { + my $seen; + CORE::shift; + my @args = map { + /^:?(primes|stack)=(\d+((\.\d*)?[eE][-+]?\d+)?)[kKmMgG]?$/ + ? do { ($1 eq 'primes' ? $initprimes : $initmem) = _human2decimal $2; + $seen++; + () } + : $_ + } @_; + if ($seen && defined &Math::Pari::pari2iv) { + require Carp; + Carp::croak( + "Can't set primelimit and stack size after Math::Pari is loaded") + } + require Math::Pari; + @_ = ('Math::Pari', @args); + goto &Math::Pari::import; +} + +1; + +=head1 NAME + +Math::PariInit - load C<Math::Pari> with specified $primelimit and $initmem. + +=head1 SYNOPSIS + + use Math::PariInit qw(:DEFAULT :int primes=1.2e7 stack=1e7 prime) + $bigprime = prime(500000); + +=head1 DESCRIPTION + +C<use Math::PariInit> takes the same arguments as C<use Math::Pari> +with the addition of C<:primes=I<limit>> and C<:stack=I<bytes>> which +specify up to which number the initial list of primes should be +precalculated, and how large should be the arena for PARI calculations. + +The arguments C<primes> and C<stack> cannot be specified if +Math::Pari is already loaded. + +=head1 AUTHOR + +Ilya Zakharevich L<ilyaz@cpan.org> + +=cut + |