Source code for wbia.templates.generate_notebook

# -*- coding: utf-8 -*-
r"""
CommandLine:
    # Generate and start an IPython notebook
    python -m wbia --tf autogen_ipynb --ipynb --db <dbname> [-a <acfg>] [-t <pcfg>]

    python -m wbia --tf autogen_ipynb --ipynb --db seaturtles -a default2:qhas_any=\(left,right\),sample_occur=True,occur_offset=[0,1,2],num_names=1

CommandLine:
    # to connect to a notebook on a remote machine that does not have the
    # appropriate port exposed you must start an SSH tunnel.
    # Typically a jupyter-notebook runs on port 8888.
    # Run this command on your local machine.
    ssh -N -f -L localhost:<local_port>:localhost:<remote_port> <remote_user>@<remote_host>

    E.G.
    ssh -N -f -L localhost:8889:localhost:8888 joncrall@hyrule.cs.rpi.edu
    # Now you can connect locally
    firefox localhost:8889


    # Running a server:
    jupyter-notebook password
    jupyter-notebook --no-browser --NotebookApp.iopub_data_rate_limit=100000000 --NotebookApp.token=


    # To allow remote jupyter-noteobok connections
    jupyter notebook --generate-config

    # Really need to do jupyter hub

    need to set
    c.NotebookApp.port = 8888
    c.NotebookApp.open_browser = False
    c.NotebookApp.ip = '*'


"""
import utool as ut
from wbia.templates import notebook_cells
from functools import partial


[docs]def autogen_ipynb(ibs, launch=None, run=None): r""" Autogenerates standard IBEIS Image Analysis IPython notebooks. CommandLine: python -m wbia autogen_ipynb --run --db lynx python -m wbia autogen_ipynb --run --db lynx python -m wbia autogen_ipynb --ipynb --db PZ_MTEST -p :proot=smk,num_words=64000 default python -m wbia autogen_ipynb --ipynb --db PZ_MTEST --asreport python -m wbia autogen_ipynb --ipynb --db PZ_MTEST --noexample --withtags python -m wbia autogen_ipynb --ipynb --db PZ_MTEST python -m wbia autogen_ipynb --ipynb --db STS_SandTigers python -m wbia autogen_ipynb --db PZ_MTEST # TODO: Add support for dbdir to be specified python -m wbia autogen_ipynb --db ~/work/PZ_MTEST python -m wbia autogen_ipynb --ipynb --db Oxford -a default:qhas_any=\(query,\),dpername=1,exclude_reference=True,dminqual=good python -m wbia autogen_ipynb --ipynb --db PZ_MTEST -a default -t best:lnbnn_normalizer=[None,normlnbnn-test] python -m wbia.templates.generate_notebook --exec-autogen_ipynb --db wd_peter_blinston --ipynb python -m wbia autogen_ipynb --db PZ_Master1 --ipynb python -m wbia autogen_ipynb --db PZ_Master1 -a timectrl:qindex=0:100 -t best best:normsum=True --ipynb --noexample python -m wbia autogen_ipynb --db PZ_Master1 -a timectrl --run jupyter-notebook Experiments-lynx.ipynb killall python python -m wbia autogen_ipynb --db humpbacks --ipynb -t default:proot=BC_DTW -a default:has_any=hasnotch python -m wbia autogen_ipynb --db humpbacks --ipynb -t default:proot=BC_DTW default:proot=vsmany -a default:has_any=hasnotch,mingt=2,qindex=0:50 --noexample python -m wbia autogen_ipynb --db testdb_curvrank --ipynb -t default:proot=CurvRankDorsal python -m wbia autogen_ipynb --db testdb_curvrank --ipynb -t default:proot=CurvRankFluke python -m wbia autogen_ipynb --db PW_Master --ipynb -t default:proot=CurvRankDorsal python -m wbia autogen_ipynb --db testdb_identification --ipynb -t default:proot=Deepsense Ignore: python -m wbia autogen_ipynb --db WS_ALL Example: >>> # SCRIPT >>> from wbia.templates.generate_notebook import * # NOQA >>> import wbia >>> ibs = wbia.opendb(defaultdb='testdb1') >>> result = autogen_ipynb(ibs) >>> print(result) """ dbname = ibs.get_dbname() fname = 'Experiments-' + dbname nb_fpath = fname + '.ipynb' if ut.get_argflag('--cells'): notebook_cells = make_wbia_cell_list(ibs) print('\n# ---- \n'.join(notebook_cells)) return # TODO: Add support for dbdir to be specified notebook_str = make_wbia_notebook(ibs) ut.writeto(nb_fpath, notebook_str) run = ut.get_argflag('--run') if run is None else run launch = launch if launch is not None else ut.get_argflag('--ipynb') if run: run_nb = ut.run_ipython_notebook(notebook_str) output_fpath = ut.export_notebook(run_nb, fname) ut.startfile(output_fpath) elif launch: command = ' '.join( [ 'jupyter-notebook', '--NotebookApp.iopub_data_rate_limit=10000000', '--NotebookApp.token=', nb_fpath, ] ) ut.cmd2(command, detatch=True, verbose=True) else: print('notebook_str =\n%s' % (notebook_str,))
[docs]def get_default_cell_template_list(ibs): """ Defines the order of ipython notebook cells """ cells = notebook_cells noexample = not ut.get_argflag('--examples') asreport = ut.get_argflag('--asreport') withtags = ut.get_argflag('--withtags') cell_template_list = [] info_cells = [ cells.pipe_config_info, cells.annot_config_info, # cells.per_encounter_stats, cells.timestamp_distribution, ] dev_analysis = [ cells.config_overlap, # cells.dbsize_expt, # None if ibs.get_dbname() == 'humpbacks' else cells.feat_score_sep, cells.all_annot_scoresep, cells.success_annot_scoresep, ] cell_template_list += [ cells.introduction if asreport else None, cells.nb_init, cells.db_init, None if ibs.get_dbname() != 'humpbacks' else cells.fluke_select, ] if not asreport: cell_template_list += info_cells if not noexample: cell_template_list += [ cells.example_annotations, cells.example_names, ] cell_template_list += [ cells.per_annotation_accuracy, cells.per_name_accuracy, cells.easy_success_cases, cells.hard_success_cases, cells.failure_type1_cases, cells.failure_type2_cases, cells.total_failure_cases, cells.timedelta_distribution, ] if withtags: cell_template_list += [ cells.investigate_specific_case, cells.view_intereseting_tags, ] if asreport: # Append our debug stuff at the bottom cell_template_list += [cells.IGNOREAFTER] cell_template_list += info_cells cell_template_list += dev_analysis cell_template_list += [ cells.config_disagree_cases, ] cell_template_list = ut.filter_Nones(cell_template_list) cell_template_list = ut.lmap(ut.normalize_cells, cell_template_list) if not asreport: # Remove all of the extra fluff cell_template_list = [ (header.split('\n')[0], code, None) for (header, code, footer) in cell_template_list ] return cell_template_list
[docs]def make_wbia_notebook(ibs): r""" Args: ibs (wbia.IBEISController): wbia controller object CommandLine: python -m wbia.templates.generate_notebook --exec-make_wbia_notebook --db wd_peter_blinston --asreport python -m wbia --tf --exec-make_wbia_notebook python -m wbia --tf make_wbia_notebook --db lynx jupyter-notebook tmp.ipynb runipy tmp.ipynb --html report.html runipy --pylab tmp.ipynb tmp2.ipynb sudo pip install runipy python -c "import runipy; print(runipy.__version__)" Example: >>> # SCRIPT >>> from wbia.templates.generate_notebook import * # NOQA >>> import wbia >>> ibs = wbia.opendb(defaultdb='testdb1') >>> notebook_str = make_wbia_notebook(ibs) >>> print(notebook_str) """ cell_list = make_wbia_cell_list(ibs) notebook_str = ut.make_notebook(cell_list) return notebook_str
[docs]def make_wbia_cell_list(ibs): cell_template_list = get_default_cell_template_list(ibs) autogen_str = '# python -m wbia autogen_ipynb --launch --dbdir %r' % (ibs.get_dbdir()) # autogen_str = ut.make_autogen_str() dbname = ibs.get_dbname() dbdir = ibs.dbdir default_acfgstr = ut.get_argval('-a', type_=str, default='default:is_known=True') asreport = ut.get_argflag('--asreport') default_pcfgstr_list = ut.get_argval(('-t', '-p'), type_=list, default='default') default_pcfgstr = ut.repr3(default_pcfgstr_list, nobr=True) if asreport: annotconfig_list_body = ut.codeblock(ut.repr2(default_acfgstr)) pipeline_list_body = ut.codeblock(default_pcfgstr) else: annotconfig_list_body = ut.codeblock( ut.repr2(default_acfgstr) + '\n' + ut.codeblock( """ #'default:has_any=(query,),dpername=1,exclude_reference=True', #'default:is_known=True', #'default:is_known=True,minqual=good,require_timestamp=True,dcrossval_enc=1,view=left' #'default:qsame_imageset=True,been_adjusted=True,excluderef=True,qsize=10,dsize=20', #'default:require_timestamp=True,min_timedelta=3600', #'default:species=primary', #'unctrl:been_adjusted=True', #'timectrl:', #'timectrl:view=primary,minqual=good', #'default:minqual=good,require_timestamp=True,view=left,dcrossval_enc=1,joinme=1', #'default:minqual=good,require_timestamp=True,view=right,dcrossval_enc=1,joinme=1', #'default:minqual=ok,require_timestamp=True,view=left,dcrossval_enc=1,joinme=2', #'default:minqual=ok,require_timestamp=True,view=right,dcrossval_enc=1,joinme=2', """ ) ) pipeline_list_body = ut.codeblock( default_pcfgstr + '\n' + ut.codeblock( """ #'default', #'default:K=1,AI=False,QRH=True', #'default:K=1,RI=True,AI=False', #'default:K=1,adapteq=True', #'default:fg_on=[True,False]', """ ) ) locals_ = locals() _format = partial(ut.format_cells, locals_=locals_) cell_list = ut.flatten(map(_format, cell_template_list)) return cell_list