AI-TensorFlow-Libtensorflow

 view release on metacpan or  search on metacpan

maint/process-notebook.pl  view on Meta::CPAN

#!/usr/bin/env perl

## Requirements:
##
## perl, python, sponge, grep, jq
##
## Perl deps:
##
## $ cpanm Devel::IPerl Perl::PrereqScanner::NotQuiteLite Cwd Path::Tiny
##
## Python deps:
##
## $ pip3 install jupyter

use Path::Tiny;

sub run_notebook {
	my ($notebook) = @_;

	$ENV{SRC} = $notebook;

	$ENV{DST} = path('lib/AI/TensorFlow/Libtensorflow/Manual/Notebook/')->child(
		path($notebook)->basename('.ipynb') . '.pod'
	);

	$ENV{SRC_BASENAME} = path($notebook)->basename('.ipynb');

	$ENV{DOC_PREFIX} = "AI::TensorFlow::Libtensorflow::Manual::Notebook";

	$ENV{PODNAME} = $ENV{DOC_PREFIX} . '::' . $ENV{SRC_BASENAME};

	$ENV{GENERATOR} = $0;

	system( qw(bash -c), <<'BASH' ) == 0 or die "Failed to process $notebook";
rm $DST || true;

#if grep -C5 -P '\s+\\n' $SRC -m 2; then
	#echo -e "Notebook $SRC has whitespace"
	#exit 1
#fi

## Run the notebook
#jupyter nbconvert --execute --inplace $SRC

## Clean up metadata (changed by the previous nbconvert --execute)
## See more at <https://timstaley.co.uk/posts/making-git-and-jupyter-notebooks-play-nice/>
jq --indent 1     '
    del(.cells[].metadata | .execution)
    ' $SRC | sponge $SRC

### Notice about generated file
echo -e "# PODNAME: $PODNAME\n\n" | sponge -a $DST
echo -e "## DO NOT EDIT. Generated from $SRC using $GENERATOR.\n" | sponge -a $DST

## Add code to $DST
jupyter nbconvert $SRC --to script --stdout | sponge -a $DST;

## Add
##   __END__
##
##   =pod
##
perl -E 'say qq|__END__\n\n=pod\n\n|' | sponge -a $DST;

## Add POD
iperl nbconvert.iperl $SRC  | sponge -a $DST;

## Edit to NAME
perl -0777 -pi -e 's/(=head1 NAME\n+)$ENV{SRC_BASENAME}/\1$ENV{PODNAME}/' $DST

## Edit to local section link (Markdown::Pod does not yet recognise this).
perl -pi -E 's,\QL<CPANFILE|#CPANFILE>\E,L<CPANFILE|/CPANFILE>,g' $DST

## Add
##   =head1 CPANFILE
##
##     requires '...';
##     requires '...';
scan-perl-prereqs-nqlite --cpanfile $DST | perl -M5';print qq|=head1 CPANFILE\n\n|' -plE '$_ = q|  | . $_;' | sponge -a $DST ;

## Check output (if on TTY)
if [ -t 0 ]; then
	perldoc $DST;
fi

## Check and run script in the directory of the original (e.g., to get data
## files).
perl -c $DST
#&& perl -MCwd -MPath::Tiny -E '
	#my $nb = path(shift @ARGV);
	#my $script = path(shift @ARGV)->absolute;
	#chdir $nb->parent;
	#do $script;
	#' $SRC $DST
BASH


}

sub main {
	run_notebook('notebook/InferenceUsingTFHubMobileNetV2Model.ipynb');
	run_notebook('notebook/InferenceUsingTFHubEnformerGeneExprPredModel.ipynb');
	run_notebook('notebook/InferenceUsingTFHubCenterNetObjDetect.ipynb');
}

main;



( run in 1.234 second using v1.01-cache-2.11-cpan-f6376fbd888 )