Types::PDL

This module provides Type::Tiny compatible types for PDL.

  Types

Types which accept parameters (see "Parameters") will list them.

   "NDArray" | "Piddle" (*deprecated*)

Allows an object blessed into the class "PDL", e.g.

  validate( [pdl], NDarray );

It accepts the following parameters:

  null
  empty
  ndims
  ndims_min
  ndims_max
  shape
  type

   "NDArray0D" | "Piddle0D" (*deprecated*)

Allows an object blessed into the class "PDL" with "ndims" = 0. It
accepts the following parameters:

  null
  type

   "NDArray1D" | "Piddle1D" (*deprecated*)

Allows an object blessed into the class "PDL" with "ndims" = 1. It
accepts the following parameters:

  null
  empty
  shape
  type

   "NDArray2D" | "Piddle2D" (*deprecated*)

Allows an object blessed into the class "PDL" with "ndims" = 2. It
accepts the following parameters:

  null
  empty
  shape
  type

   "NDArray3D" | "Piddle3D" (*deprecated*)

Allows an object blessed into the class "PDL" with "ndims" = 3. It
accepts the following parameters:

  null
  empty
  shape
  type

  Coercions

The following coercions are provided, and may be applied via a type
object's "plus_coercions" in Type::Tiny or "plus_fallback_coercions" in
Type::Tiny methods, e.g.

  NDArray->plus_coercions( NDArrayFromAny );

   "NDArrayFromAny" | "PiddleFromAny" (*deprecated*)

Uses "topdl" in PDL::Core to coerce the value into a PDL object.

  Parameters

Some types take optional parameters which add additional constraints on
the object. For example, to indicate that only empty PDL objects are
accepted:

  validate( [pdl], NDArray[ empty => 1 ] );

The available parameters are:

   "empty"

This accepts a boolean value; if true the PDL object must be empty (i.e.
the "isempty" method returns true), if false, it must not be empty.

   "null"

This accepts a boolean value; if true the PDL object must be a null PDL
object, if false, it must not be null.

   "ndims"

This specifies a fixed number of dimensions which the PDL object must
have. Don't mix use this with "ndims_min" or "ndims_max".

   "ndims_min"

The minimum number of dimensions the PDL object may have. Don't specify
this with "ndims".

   "ndims_max"

The maximum number of dimensions the PDL object may have. Don't specify
this with "ndims".

   "shape"

The shape of the PDL object.

The value is a list of specifications for dimensions, expressed either
as elements in a Perl array or as comma-delimited fields in a string.

The specifications are reminiscent of regular expressions. A
specification is composed of an extent size followed by an optional
quantifier indicating the number of dimensions it should match.

Extent sizes may be

1   A non-zero positive integer representing the extent of the
    dimension.

2   The strings "X" or ":" indicating that any extent is accepted for
    that dimension

Quantifiers may be

  *           Match 0 or more times
  +           Match 1 or more times
  ?           Match 1 or 0 times
  {n}         Match exactly n times
  {n,}        Match at least n times
  {n,m}       Match at least n but not more than m times

Here are some example specifications and the shapes they might match (in
the match, "X" means any extent):

  2,2     => (2,2)
  3,3,3   => (3,3,3)
  3{3}    => (3,3,3)
  3{2,3}  => (3,3),  (3,3,3)
  1,X     => (1,X)
  1,X+    => (1,X), (1,X,X),  (1,X,X,X), ...
  1,X{1,} => (1,X), (1,X,X),  (1,X,X,X), ...
  1,X?,3   => (1,X,3), (1,3)
  1,2,X*   => (1,2), (1,2,X),  (1,2,X,X), ...
  1,2,3*,5   => (1,2,5), (1,2,3,5),  (1,2,3,3,5), ...

   "type"

The type of the PDL object. The value may be a PDL::Type object or a
string containing the name of a type (e.g., "double"). For a complete
list of types, run this command:

  perl -MPDL::Types=mapfld,ppdefs \
    -E 'say mapfld( $_ => 'ppsym' => 'ioname' )  for ppdefs'

INSTALLATION

This is a Perl module distribution. It should be installed with whichever
tool you use to manage your installation of Perl, e.g. any of

  cpanm .
  cpan  .
  cpanp -i .

Consult http://www.cpan.org/modules/INSTALL.html for further instruction.
Should you wish to install this module manually, the procedure is

  perl Makefile.PL
  make
  make test
  make install

COPYRIGHT AND LICENSE

This software is Copyright (c) 2017 by Smithsonian Astrophysical
Observatory.

This is free software, licensed under:

  The GNU General Public License, Version 3, June 2007
