File Coverage

blib/lib/PDL/Algorithm/Center/Types.pm
Criterion Covered Total %
statement 24 24 100.0
branch n/a
condition n/a
subroutine 9 9 100.0
pod n/a
total 33 33 100.0


line stmt bran cond sub pod time code
1             package PDL::Algorithm::Center::Types;
2              
3             # ABSTRACT: Type::Tiny types for PDL::Algorithm::Center
4              
5 4     4   501556 use v5.10;
  4         18  
6 4     4   33 use strict;
  4         6  
  4         97  
7 4     4   15 use warnings;
  4         14  
  4         283  
8              
9             our $VERSION = '0.15';
10              
11 4     4   19 use List::Util 1.33 'any';
  4         69  
  4         383  
12 4     4   3651 use Types::Standard -types;
  4         621503  
  4         47  
13 4     4   37316 use Types::PDL -types;
  4         297927  
  4         47  
14              
15 4     4   10988 use Type::Utils -all;
  4         11  
  4         39  
16 4         28 use Type::Library -base, -declare => qw[
17             Piddle_ne
18             Piddle0D_ne
19             Piddle1D_ne
20             Piddle2D_ne
21             Piddle_min1D_ne
22             Coords
23             Center
24             ArrayOfPiddle1D
25              
26             Piddle1DFromPiddle0D
27             Piddle2DFromPiddle1D
28             Piddle2DFromArrayOfPiddle1D
29 4     4   12644 ];
  4         10  
30              
31 4     4   8502 BEGIN { extends 'Types::PDL' }
32              
33             declare Piddle_ne, as Piddle [ null => 0, empty => 0 ];
34              
35             Piddle_ne->coercion->add_type_coercions( map @{ $_->type_coercion_map }, PiddleFromAny );
36              
37             declare Piddle0D_ne, as Piddle0D [ null => 0 ];
38              
39             declare Piddle1D_ne, as Piddle1D [ null => 0, empty => 0 ];
40              
41             declare Piddle2D_ne, as Piddle2D [ null => 0, empty => 0 ];
42              
43             coerce Piddle0D_ne, from Num, q{PDL::Core::topdl( $_ )};
44              
45             coerce Piddle1D_ne, from ArrayRef [Num], q{PDL::Core::topdl( $_ )},
46              
47             from Piddle0D_ne->coercibles, via { to_Piddle0D_ne( $_ )->dummy( 0 ) };
48              
49             coerce Piddle2D_ne, from Piddle1D_ne->coercibles, via { to_Piddle1D_ne( $_ )->dummy( 0 ) },
50              
51             from Tuple [ ArrayRef [Num] ], q{PDL::Core::topdl( $_ )};
52              
53             declare Piddle_min1D_ne, as Piddle [ ndims_min => 1, null => 0, empty => 0 ];
54              
55             coerce Piddle_min1D_ne, from Piddle1D_ne->coercibles, via { to_Piddle1D_ne( $_ ) };
56              
57             Piddle_min1D_ne->coercion->add_type_coercions( map @{ $_->type_coercion_map }, PiddleFromAny );
58              
59             declare_coercion Piddle1DFromPiddle0D,
60             to_type Piddle1D_ne,
61             from Piddle0D_ne->coercibles,
62             via { to_Piddle0D_ne( $_ )->dummy( 0 ) };
63              
64             declare_coercion Piddle2DFromPiddle1D,
65             to_type Piddle2D_ne,
66             from Piddle1D_ne->coercibles,
67             via { to_Piddle1D_ne( $_ )->dummy( 0 ) };
68              
69             declare ArrayOfPiddle1D, as ArrayRef [Piddle1D_ne], coercion => 1;
70              
71             declare_coercion Piddle2DFromArrayOfPiddle1D,
72             to_type Piddle2D_ne, from ArrayOfPiddle1D->coercibles, via {
73             my $tmp = to_ArrayOfPiddle1D( $_ );
74             my $nelem = $tmp->[0]->nelem;
75              
76             return $_
77             if any { $_->nelem != $nelem } @{$tmp};
78              
79             return PDL::glue( 0, map { $_->dummy( 0 ) } @{$tmp} );
80             };
81              
82              
83             declare Center, as Piddle1D_ne, coercion => 1;
84             Center->coercion->add_type_coercions( map @{ $_->type_coercion_map }, Piddle1DFromPiddle0D, );
85              
86              
87             declare Coords, as Piddle2D_ne, coercion => 1;
88             Coords->coercion->add_type_coercions( map @{ $_->type_coercion_map },
89             Piddle2DFromArrayOfPiddle1D, );
90              
91              
92             1;
93              
94             #
95             # This file is part of PDL-Algorithm-Center
96             #
97             # This software is Copyright (c) 2017 by Smithsonian Astrophysical Observatory.
98             #
99             # This is free software, licensed under:
100             #
101             # The GNU General Public License, Version 3, June 2007
102             #
103              
104             __END__