AI-Pathfinding-OptimizeMultiple
view release on metacpan or search on metacpan
lib/AI/Pathfinding/OptimizeMultiple/DataInputObj.pm view on Meta::CPAN
package AI::Pathfinding::OptimizeMultiple::DataInputObj;
$AI::Pathfinding::OptimizeMultiple::DataInputObj::VERSION = '0.0.17';
use strict;
use warnings;
use 5.012;
use MooX qw/late/;
use File::Path qw(mkpath);
use AI::Pathfinding::OptimizeMultiple::Scan ();
use PDL (qw( pdl ));
use PDL::IO::FastRaw (qw( readfraw writefraw ));
has start_board => ( isa => 'Int', is => 'ro', required => 1 );
has num_boards => ( isa => 'Int', is => 'ro', required => 1 );
has selected_scans => (
isa => 'ArrayRef',
is => 'ro',
required => 1,
default => sub {
my ($self) = @_;
return $self->_calc_selected_scan_list();
},
lazy => 1,
);
has _scan_ids_to_indexes => (
isa => 'HashRef[Int]',
is => 'ro',
lazy => 1,
default => sub {
my ($self) = @_;
my $scan_ids = $self->get_scan_ids_aref;
return +{ map { $scan_ids->[$_] => $_ } 0 .. $#$scan_ids };
},
);
sub _slurp
{
my $filename = shift;
open my $in, "<", $filename
or die "Could not open $filename";
binmode $in;
local $/;
my $content = <$in>;
close($in);
return $content;
}
sub _read_text_ints_file
{
my $self = shift;
my $filename = shift;
my $text = _slurp($filename);
return [ split( /[\n\r]+/, $text ) ];
}
# Number of selected scans.
sub _num_sel_scans
{
my $self = shift;
return scalar( @{ $self->selected_scans() } );
}
sub _gen_initial_scans_tensor
{
my $self = shift;
my $extra_dims = shift || [];
return zeroes( $self->num_boards(), $self->_num_sel_scans, @$extra_dims );
}
sub _should_update
{
my ( $self, $src_path, $dest_path ) = @_;
my @orig_stat = stat($src_path);
my @proc_stat = stat($dest_path);
return ( ( !@proc_stat ) || ( $orig_stat[9] > $proc_stat[9] ) );
}
# Number of numbers in the header of the solutions' iteration counts
my $NUM_NUMBERS_IN_HEADER = 3;
my $HEADER_START_BOARD_IDX = 0;
my $HEADER_NUM_BOARDS = 1;
my $HEADER_ITERATIONS_LIMIT = 2;
sub _get_scans_data_helper
{
my $self = shift;
my $selected_scans = $self->selected_scans();
my $start_board = $self->start_board();
my $scans_data = {};
my $scans_lens_data = {};
( run in 0.369 second using v1.01-cache-2.11-cpan-411bb0df24b )