def print_latexsum(ibs, testres, verbose=True): r""" Args: ibs (IBEISController): ibeis controller object testres (?): CommandLine: python -m ibeis.expt.experiment_printres --exec-print_latexsum python -m ibeis.scripts.gen_cand_expts --exec-gen_script python -m ibeis --tf print_latexsum -t candidacy --db PZ_Master0 -a controlled --rank-lt-list=1,5,10,100 python -m ibeis --tf print_latexsum -t candidacy --db PZ_MTEST -a controlled --rank-lt-list=1,5,10,100 Example: >>> # SCRIPT >>> from ibeis.expt.experiment_printres import * # NOQA >>> from ibeis.init import main_helpers >>> ibs, testres = main_helpers.testdata_expts() >>> tabular_str2 = print_latexsum(ibs, testres) """ print('==========================') print('[harn] LaTeX: %s' % testres.testnameid) print('==========================') # Create configuration latex table X_LIST = testres.get_X_LIST() criteria_lbls = [r'#ranks $\leq$ %d' % X for X in X_LIST] dbname = ibs.get_dbname() cfg_score_title = dbname + ' rank scores' nLessX_dict = testres.get_nLessX_dict() cfgscores = np.array([nLessX_dict[int(X)] for X in X_LIST]).T # For mat row labels row_lbls = testres.get_short_cfglbls() # Order cdf list by rank0 row_lbls = ut.sortedby(row_lbls, cfgscores.T[0], reverse=True) cfgscores = np.array( ut.sortedby(cfgscores.tolist(), cfgscores.T[0], reverse=True)) cmdaug = testres.get_title_aug() #if testres.common_acfg is not None: # cfgname = testres.common_acfg['common']['_cfgname'] # cmdaug += '_' + cfgname #if hasattr(testres, 'common_cfgdict'): # cmdaug += '_' + (testres.common_cfgdict['_cfgname']) # cfg_score_title += ' ' + cmdaug tabular_kwargs = dict(title=cfg_score_title, out_of=testres.nQuery, bold_best=True, flip=False, SHORTEN_ROW_LBLS=False) col_lbls = criteria_lbls tabular_str = ut.util_latex.make_score_tabular(row_lbls, col_lbls, cfgscores, **tabular_kwargs) #latex_formater.render(tabular_str) cmdname = ut.latex_sanitize_command_name('Expmt' + ibs.get_dbname() + '_' + cmdaug + 'Table') tabular_str2 = ut.latex_newcommand(cmdname, tabular_str) print(tabular_str2) return tabular_str2
def get_latex_figure_str2(fpath_list, cmdname, **kwargs): """ hack for candidacy """ import utool as ut from os.path import relpath # Make relative paths if kwargs.pop('relpath', True): start = ut.truepath('~/latex/crall-candidacy-2015') fpath_list = [relpath(fpath, start) for fpath in fpath_list] cmdname = ut.latex_sanitize_command_name(cmdname) kwargs['caption_str'] = kwargs.get('caption_str', cmdname) figure_str = ut.get_latex_figure_str(fpath_list, **kwargs) latex_block = ut.latex_newcommand(cmdname, figure_str) return latex_block
def make_individual_latex_figures(ibs, fpaths_list, flat_case_labels, cfgx2_shortlbl, case_figdir, analysis_fpath_list): # HACK MAKE LATEX CONVINENCE STUFF #print('LATEX HACK') if len(fpaths_list) == 0: print('nothing to render') return RENDER = ut.get_argflag('--render') DUMP_FIGDEF = ut.get_argflag(('--figdump', '--dump-figdef', '--figdef')) if not (DUMP_FIGDEF or RENDER): # HACK return latex_code_blocks = [] latex_block_keys = [] caption_prefix = ut.get_argval('--cappref', type_=str, default='') caption_suffix = ut.get_argval('--capsuf', type_=str, default='') cmdaug = ut.get_argval('--cmdaug', type_=str, default='custom') selected = None for case_idx, (fpaths, labels) in enumerate(zip(fpaths_list, flat_case_labels)): if labels is None: labels = [cmdaug] if len(fpaths) < 4: nCols = len(fpaths) else: nCols = 2 _cmdname = ibs.get_dbname() + ' Case ' + ' '.join(labels) + '_' + str( case_idx) #print('_cmdname = %r' % (_cmdname,)) cmdname = ut.latex_sanitize_command_name(_cmdname) label_str = cmdname if len(caption_prefix) == 0: caption_str = ut.escape_latex( 'Casetags: ' + ut.list_str(labels, nl=False, strvals=True) + ', db=' + ibs.get_dbname() + '. ') else: caption_str = '' use_sublbls = len(cfgx2_shortlbl) > 1 if use_sublbls: caption_str += ut.escape_latex( 'Each figure shows a different configuration: ') sublbls = [ '(' + chr(97 + count) + ') ' for count in range(len(cfgx2_shortlbl)) ] else: #caption_str += ut.escape_latex('This figure depicts correct and #incorrect matches from configuration: ') sublbls = [''] * len(cfgx2_shortlbl) def wrap_tt(text): return r'{\tt ' + text + '}' _shortlbls = cfgx2_shortlbl _shortlbls = list(map(ut.escape_latex, _shortlbls)) # Adjust spacing for breaks #tex_small_space = r'' tex_small_space = r'\hspace{0pt}' # Remove query specific config flags in individual results _shortlbls = [ re.sub('\\bq[^,]*,?', '', shortlbl) for shortlbl in _shortlbls ] # Let config strings be broken over newlines _shortlbls = [ re.sub('\\+', tex_small_space + '+' + tex_small_space, shortlbl) for shortlbl in _shortlbls ] _shortlbls = [ re.sub(', *', ',' + tex_small_space, shortlbl) for shortlbl in _shortlbls ] _shortlbls = list(map(wrap_tt, _shortlbls)) cfgx2_texshortlbl = [ '\n ' + lbl + shortlbl for lbl, shortlbl in zip(sublbls, _shortlbls) ] caption_str += ut.conj_phrase(cfgx2_texshortlbl, 'and') + '.\n ' caption_str = '\n ' + caption_prefix + caption_str + caption_suffix caption_str = caption_str.rstrip() figure_str = ut.get_latex_figure_str(fpaths, nCols=nCols, label_str=label_str, caption_str=caption_str, use_sublbls=None, use_frame=True) latex_block = ut.latex_newcommand(cmdname, figure_str) latex_block = '\n%----------\n' + latex_block latex_code_blocks.append(latex_block) latex_block_keys.append(cmdname) # HACK remove_fpath = ut.truepath('~/latex/crall-candidacy-2015') + '/' latex_fpath = join(case_figdir, 'latex_cases.tex') if selected is not None: selected_keys = selected else: selected_keys = latex_block_keys selected_blocks = ut.dict_take( dict(zip(latex_block_keys, latex_code_blocks)), selected_keys) figdef_block = '\n'.join(selected_blocks) figcmd_block = '\n'.join(['\\' + key for key in latex_block_keys]) selected_block = figdef_block + '\n\n' + figcmd_block # HACK: need full paths to render selected_block_renderable = selected_block selected_block = selected_block.replace(remove_fpath, '') if RENDER: ut.render_latex_text(selected_block_renderable) if DUMP_FIGDEF: ut.writeto(latex_fpath, selected_block) #if NOT DUMP AND NOT RENDER: # print('STANDARD LATEX RESULTS') # cmdname = ibs.get_dbname() + 'Results' # latex_block = ut.get_latex_figure_str2(analysis_fpath_list, cmdname, nCols=1) # ut.print_code(latex_block, 'latex') if DUMP_FIGDEF or RENDER: ut.print_code(selected_block, 'latex')
def make_individual_latex_figures(ibs, fpaths_list, flat_case_labels, cfgx2_shortlbl, case_figdir, analysis_fpath_list): # HACK MAKE LATEX CONVINENCE STUFF #print('LATEX HACK') if len(fpaths_list) == 0: print('nothing to render') return RENDER = ut.get_argflag('--render') DUMP_FIGDEF = ut.get_argflag(('--figdump', '--dump-figdef', '--figdef')) if not (DUMP_FIGDEF or RENDER): # HACK return latex_code_blocks = [] latex_block_keys = [] caption_prefix = ut.get_argval('--cappref', type_=str, default='') caption_suffix = ut.get_argval('--capsuf', type_=str, default='') cmdaug = ut.get_argval('--cmdaug', type_=str, default='custom') selected = None for case_idx, (fpaths, labels) in enumerate(zip(fpaths_list, flat_case_labels)): if labels is None: labels = [cmdaug] if len(fpaths) < 4: nCols = len(fpaths) else: nCols = 2 _cmdname = ibs.get_dbname() + ' Case ' + ' '.join(labels) + '_' + str(case_idx) #print('_cmdname = %r' % (_cmdname,)) cmdname = ut.latex_sanitize_command_name(_cmdname) label_str = cmdname if len(caption_prefix) == 0: caption_str = ut.escape_latex('Casetags: ' + ut.list_str(labels, nl=False, strvals=True) + ', db=' + ibs.get_dbname() + '. ') else: caption_str = '' use_sublbls = len(cfgx2_shortlbl) > 1 if use_sublbls: caption_str += ut.escape_latex('Each figure shows a different configuration: ') sublbls = ['(' + chr(97 + count) + ') ' for count in range(len(cfgx2_shortlbl))] else: #caption_str += ut.escape_latex('This figure depicts correct and #incorrect matches from configuration: ') sublbls = [''] * len(cfgx2_shortlbl) def wrap_tt(text): return r'{\tt ' + text + '}' _shortlbls = cfgx2_shortlbl _shortlbls = list(map(ut.escape_latex, _shortlbls)) # Adjust spacing for breaks #tex_small_space = r'' tex_small_space = r'\hspace{0pt}' # Remove query specific config flags in individual results _shortlbls = [re.sub('\\bq[^,]*,?', '', shortlbl) for shortlbl in _shortlbls] # Let config strings be broken over newlines _shortlbls = [re.sub('\\+', tex_small_space + '+' + tex_small_space, shortlbl) for shortlbl in _shortlbls] _shortlbls = [re.sub(', *', ',' + tex_small_space, shortlbl) for shortlbl in _shortlbls] _shortlbls = list(map(wrap_tt, _shortlbls)) cfgx2_texshortlbl = ['\n ' + lbl + shortlbl for lbl, shortlbl in zip(sublbls, _shortlbls)] caption_str += ut.conj_phrase(cfgx2_texshortlbl, 'and') + '.\n ' caption_str = '\n ' + caption_prefix + caption_str + caption_suffix caption_str = caption_str.rstrip() figure_str = ut.get_latex_figure_str(fpaths, nCols=nCols, label_str=label_str, caption_str=caption_str, use_sublbls=None, use_frame=True) latex_block = ut.latex_newcommand(cmdname, figure_str) latex_block = '\n%----------\n' + latex_block latex_code_blocks.append(latex_block) latex_block_keys.append(cmdname) # HACK remove_fpath = ut.truepath('~/latex/crall-candidacy-2015') + '/' latex_fpath = join(case_figdir, 'latex_cases.tex') if selected is not None: selected_keys = selected else: selected_keys = latex_block_keys selected_blocks = ut.dict_take(dict(zip(latex_block_keys, latex_code_blocks)), selected_keys) figdef_block = '\n'.join(selected_blocks) figcmd_block = '\n'.join(['\\' + key for key in latex_block_keys]) selected_block = figdef_block + '\n\n' + figcmd_block # HACK: need full paths to render selected_block_renderable = selected_block selected_block = selected_block.replace(remove_fpath, '') if RENDER: ut.render_latex_text(selected_block_renderable) if DUMP_FIGDEF: ut.writeto(latex_fpath, selected_block) #if NOT DUMP AND NOT RENDER: # print('STANDARD LATEX RESULTS') # cmdname = ibs.get_dbname() + 'Results' # latex_block = ut.get_latex_figure_str2(analysis_fpath_list, cmdname, nCols=1) # ut.print_code(latex_block, 'latex') if DUMP_FIGDEF or RENDER: ut.print_code(selected_block, 'latex')
def print_latexsum(ibs, testres, verbose=True): r""" Args: ibs (IBEISController): ibeis controller object testres (?): CommandLine: python -m ibeis.expt.experiment_printres --exec-print_latexsum python -m ibeis.scripts.gen_cand_expts --exec-gen_script python -m ibeis --tf print_latexsum -t candidacy --db PZ_Master0 -a controlled --rank-lt-list=1,5,10,100 python -m ibeis --tf print_latexsum -t candidacy --db PZ_MTEST -a controlled --rank-lt-list=1,5,10,100 Example: >>> # SCRIPT >>> from ibeis.expt.experiment_printres import * # NOQA >>> from ibeis.init import main_helpers >>> ibs, testres = main_helpers.testdata_expts() >>> tabular_str2 = print_latexsum(ibs, testres) """ print('==========================') print('[harn] LaTeX: %s' % testres.testnameid) print('==========================') # Create configuration latex table X_LIST = testres.get_X_LIST() criteria_lbls = [r'#ranks $\leq$ %d' % X for X in X_LIST] dbname = ibs.get_dbname() cfg_score_title = dbname + ' rank scores' nLessX_dict = testres.get_nLessX_dict() cfgscores = np.array([nLessX_dict[int(X)] for X in X_LIST]).T # For mat row labels row_lbls = testres.get_short_cfglbls() # Order cdf list by rank0 row_lbls = ut.sortedby(row_lbls, cfgscores.T[0], reverse=True) cfgscores = np.array(ut.sortedby(cfgscores.tolist(), cfgscores.T[0], reverse=True)) cmdaug = testres.get_title_aug() #if testres.common_acfg is not None: # cfgname = testres.common_acfg['common']['_cfgname'] # cmdaug += '_' + cfgname #if hasattr(testres, 'common_cfgdict'): # cmdaug += '_' + (testres.common_cfgdict['_cfgname']) # cfg_score_title += ' ' + cmdaug #else: # #ut.embed() # assert False, 'need common_cfgdict' tabular_kwargs = dict( title=cfg_score_title, out_of=testres.nQuery, bold_best=True, flip=False, SHORTEN_ROW_LBLS=False ) col_lbls = criteria_lbls tabular_str = ut.util_latex.make_score_tabular( row_lbls, col_lbls, cfgscores, **tabular_kwargs) #latex_formater.render(tabular_str) cmdname = ut.latex_sanitize_command_name('Expmt' + ibs.get_dbname() + '_' + cmdaug + 'Table') tabular_str2 = ut.latex_newcommand(cmdname, tabular_str) print(tabular_str2) return tabular_str2