AI-MXNet
view release on metacpan or search on metacpan
lib/AI/MXNet/NDArray/Base.pm view on Meta::CPAN
package AI::MXNet::NDArray::Base;
use strict;
use warnings;
use AI::MXNet::Base;
use AI::MXNet::NDArray::Doc;
use Mouse;
use AI::MXNet::Function::Parameters;
=head1 NAME
AI::MXNet::NDArray::Base
=cut
=head1 DESCRIPTION
This module provides a convenient interface to a C++ functions
that work with NDArray.
Essentially it loads them up during the lib startup into the Perl space.
=cut
my %function_meta;
method function_meta($code)
{
return $function_meta{$code};
}
method function_meta_hash()
{
return \%function_meta;
}
func _make_ndarray_function($handle, $func_name)
{
my ($real_name, $desc, $arg_names,
$arg_types, $arg_descs, $key_var_num_args,
$ret_type) = @{ check_call(AI::MXNetCAPI::SymbolGetAtomicSymbolInfo($handle)) };
$ret_type //= '';
my $doc_str = build_doc($func_name,
$desc,
$arg_names,
$arg_types,
$arg_descs,
$key_var_num_args,
$ret_type
);
my @arguments;
for my $i (0..(@$arg_names-1))
{
if(not $arg_types->[$i] =~ /^(?:NDArray|Symbol|ndarray\-or\-symbol)/)
{
push @arguments, $arg_names->[$i];
}
}
my $generic_ndarray_function = sub
{
my $class = shift;
my (@args, %kwargs);
if(@_ and ref $_[-1] eq 'HASH')
{
%kwargs = %{ pop(@_) };
}
@args = @_;
if(ref $class)
{
@args = ($class) if not @args;
$class = ref $class;
}
my @ndargs;
my @pos_args;
for my $i (@args)
{
if(blessed($i) and $i->isa($class))
{
push @ndargs, $i->handle;
}
else
{
push @pos_args, $i;
( run in 0.554 second using v1.01-cache-2.11-cpan-39bf76dae61 )