AI-TensorFlow-Libtensorflow
view release on metacpan or search on metacpan
lib/AI/TensorFlow/Libtensorflow/Tensor.pm view on Meta::CPAN
=> 'int64_t',
);
$ffi->attach( [ 'TensorMaybeMove' => 'MaybeMove' ] =>
[ arg 'TF_Tensor' => 'self' ],
=> 'TF_Tensor',
);
$ffi->attach( ['TensorIsAligned' => 'IsAligned'] => [
arg TF_Tensor => 't'
] => 'bool' );
eval {# TF v2.10.0
$ffi->attach( [ 'SetShape' => 'SetShape' ] =>
[
arg 'TF_Tensor' => 'self',
arg 'tf_dims_buffer' => [ qw(dims num_dims) ],
]
=> 'void'
);
};
$ffi->attach( [ 'TensorBitcastFrom' => 'BitcastFrom' ] => [
arg TF_Tensor => 'from',
arg TF_DataType => 'type',
arg TF_Tensor => 'to',
arg 'tf_dims_buffer' => [ qw(new_dims num_new_dims) ],
arg TF_Status => 'status',
] => 'void' );
#### Array helpers ####
use FFI::C::ArrayDef;
use FFI::C::StructDef;
my $adef = FFI::C::ArrayDef->new(
$ffi,
name => 'TF_Tensor_array',
members => [
FFI::C::StructDef->new(
$ffi,
members => [
p => 'opaque'
]
)
],
);
sub _adef {
$adef;
}
sub _as_array {
my $class = shift;
my $array = $class->_adef->create(0 + @_);
for my $idx (0..@_-1) {
next unless defined $_[$idx];
$array->[$idx]->p($ffi->cast('TF_Tensor', 'opaque', $_[$idx]));
}
$array;
}
sub _from_array {
my ($class, $array) = @_;
return [
map {
$ffi->cast(
'opaque',
'TF_Tensor',
$array->[$_]->p)
} 0.. $array->count - 1
]
}
#### Data::Printer ####
sub _data_printer {
my ($self, $ddp) = @_;
my @data = (
[ Type => $ddp->maybe_colorize( $self->Type, 'class' ), ],
[ Dims => sprintf "%s %s %s",
$ddp->maybe_colorize('[', 'brackets'),
join(" ",
map $ddp->maybe_colorize( $self->Dim($_), 'number' ),
0..$self->NumDims-1),
$ddp->maybe_colorize(']', 'brackets'),
],
[ NumDims => $ddp->maybe_colorize( $self->NumDims, 'number' ), ],
[ ElementCount => $ddp->maybe_colorize( $self->ElementCount, 'number' ), ],
);
my $output;
$output .= $ddp->maybe_colorize(ref $self, 'class' );
$output .= ' ' . $ddp->maybe_colorize('{', 'brackets');
$ddp->indent;
for my $item (@data) {
$output .= $ddp->newline;
$output .= join " ",
$ddp->maybe_colorize(sprintf("%-15s", $item->[0]), 'hash'),
$item->[1];
}
$ddp->outdent;
$output .= $ddp->newline;
$output .= $ddp->maybe_colorize('}', 'brackets');
return $output;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
AI::TensorFlow::Libtensorflow::Tensor - A multi-dimensional array of elements of a single data type
=head1 SYNOPSIS
use aliased 'AI::TensorFlow::Libtensorflow::Tensor' => 'Tensor';
use AI::TensorFlow::Libtensorflow::DataType qw(FLOAT);
use List::Util qw(product);
my $dims = [3, 3];
# Allocate a 3 by 3 ndarray of type FLOAT
my $t = Tensor->Allocate(FLOAT, $dims);
is $t->ByteSize, product(FLOAT->Size, @$dims), 'correct size';
my $scalar_dims = [];
my $scalar_t = Tensor->Allocate(FLOAT, $scalar_dims);
is $scalar_t->ElementCount, 1, 'single element';
is $scalar_t->ByteSize, FLOAT->Size, 'single FLOAT';
=head1 DESCRIPTION
A C<TFTensor> is an object that contains values of a
single type arranged in an n-dimensional array.
For types other than L<STRING|AI::TensorFlow::Libtensorflow::DataType/STRING>,
( run in 1.196 second using v1.01-cache-2.11-cpan-140bd7fdf52 )