AI-TensorFlow-Libtensorflow
view release on metacpan or search on metacpan
maint/process-capi.pl view on Meta::CPAN
$comment_pod
$code_pod
EOF
$pod .= $func_pod;
}
my $doc_name = 'AI::TensorFlow::Libtensorflow::Manual::CAPI';
substr($pod, 0, 0) = <<~EOF;
# PODNAME: $doc_name
# ABSTRACT: List of functions exported by TensorFlow C API
# DO NOT EDIT: Generated by @{[ path($0)->basename ]}
=pod
=encoding UTF-8
=for Pod::Coverage
=cut
=head1 DESCRIPTION
The following a list of functions exported by the TensorFlow C API with their
associated documentation from the upstream TensorFlow project. It has been
converted to POD for easy reference.
=head1 FUNCTIONS
EOF
$pod .= <<~EOF;
=head1 SEE ALSO
L<https://github.com/tensorflow/tensorflow/tree/master/tensorflow/c>
=cut
EOF
my $output = $self->lib_path->child(module_notional_filename($doc_name) =~ s/\.pm$/.pod/r );
$output->parent->mkpath;
$output->spew_utf8($pod);
}
lazy typedef_struct_data => method() {
my $re = qr{
(?<opaque>
^
typedef \s+
struct \s+
(?<name>\w+) \s+
\k<name> \s*
;
)
|
(?<transparent>
^
typedef \s+
struct \s+
(?<name>\w+) \s+
\{
[^\}]+
\} \s+
\k<name> \s*
;
)
}xm;
$self->_process_re($re);
};
method check_types() {
my @data = $self->typedef_struct_data->@*;
my %types = map { $_ => 1 } AI::TensorFlow::Libtensorflow::Lib->ffi->types;
my %part;
@part{qw(todo done)} = part { exists $types{$_} } uniq map { $_->{name} } @data;
use DDP; p %part;
}
method check_functions($first_arg = undef) {
my $functions = AI::TensorFlow::Libtensorflow::Lib->ffi->_attached_functions;
my @dupes = map { $_->[0]{c} }
grep { @$_ != 1 } values $functions->%*;
die "Duplicated functions @dupes" if @dupes;
my @data = $self->fdecl_data->@*;
say <<~STATS;
Statistics:
==========
Attached functions: @{[ scalar keys %$functions ]}
Total CAPI functions: @{[ scalar @data ]}
STATS
my $first_missing_function = first {
! exists $functions->{$_->{func_name}}
&&
(
! defined $first_arg ||
$_->{fdecl} =~ /\(\s*\Q$first_arg\E\s*\*/
)
} @data;
say "Missing function:";
use DDP; p $first_missing_function;
}
method run() {
$self->generate_capi_funcs;
#$self->check_types;
$self->check_functions;
}
subcommand 'generate-capi-docs' => method(@) {
$self->generate_capi_funcs;
};
subcommand 'check-types' => method(@) {
( run in 1.599 second using v1.01-cache-2.11-cpan-7fcb06a456a )