def interactive_commandline_prompt(msg, decisiontype): prompt_fmtstr = ut.codeblock(''' Accept system {decisiontype} decision? ========== {msg} ========== * press ENTER to ACCEPT * enter {no_phrase} to REJECT * enter {embed_phrase} to embed into ipython * any other inputs ACCEPT system decision * (input is case insensitive) ''') ans_list_embed = ['cmd', 'ipy', 'embed'] ans_list_no = ['no', 'n'] #ans_list_yes = ['yes', 'y'] prompt_str = prompt_fmtstr.format( no_phrase=ut.conj_phrase(ans_list_no), embed_phrase=ut.conj_phrase(ans_list_embed), msg=msg, decisiontype=decisiontype, ) prompt_block = ut.msgblock('USER_INPUT', prompt_str) ans = input(prompt_block).lower() if ans in ans_list_embed: ut.embed() #print(ibs2.get_dbinfo_str()) #qreq_ = ut.search_stack_for_localvar('qreq_') #qreq_.normalizer elif ans in ans_list_no: return False else: return True
def make_custom_interactions(simp_list): valid_vizmodes = ut.filter_startswith(dir(SimpleMatcher), 'visualize_') viz_index_ = [valid_vizmodes.index('visualize_matches')] def toggle_vizmode(iiter, actionkey, value, viz_index_=viz_index_): viz_index_[0] = (viz_index_[0] + 1) % len(valid_vizmodes) print('toggling') def set_param(iiter, actionkey, value, viz_index_=viz_index_): """ value = 'search_K=3' """ paramkey, paramval = value.split('=') print('parsing value=%r' % (value,)) def strip_quotes(str_): dq = ut.DOUBLE_QUOTE sq = ut.SINGLE_QUOTE return str_.strip(dq).strip(sq).strip(dq) # Sanatize paramkey = strip_quotes(paramkey.strip()) paramval = ut.smart_cast2(strip_quotes(paramval.strip())) print('setting cfgdict[%r]=%r' % (paramkey, paramval)) iiter.iterable[iiter.index][paramkey] = paramval offset_fnum_ = [0] def offset_fnum(iiter, actionkey, value, offset_fnum_=offset_fnum_): offset_fnum_[0] += len(simp_list) custom_actions = [ ('toggle', ['t'], 'toggles between ' + ut.conj_phrase(valid_vizmodes, 'and'), toggle_vizmode), ('offset_fnum', ['offset_fnum', 'o'], 'offset the figure number (keeps old figures)', offset_fnum), ('set_param', ['setparam', 's'], 'sets a config param using key=val format. eg: setparam ratio_thresh=.1', set_param), ] return custom_actions, valid_vizmodes, viz_index_, offset_fnum_
def pretty_hotkey_map(hotkeys): if hotkeys is None: return '' hotkeys = [hotkeys] if not isinstance(hotkeys, list) else hotkeys mapping = { #'right': 'right arrow', #'left': 'left arrow', } mapped_hotkeys = [mapping.get(hk, hk) for hk in hotkeys] hotkey_str = '(' + ut.conj_phrase(mapped_hotkeys, 'or') + ')' return hotkey_str
def interactive_commandline_prompt(msg, decisiontype): prompt_fmtstr = ut.codeblock( ''' Accept system {decisiontype} decision? ========== {msg} ========== * press ENTER to ACCEPT * enter {no_phrase} to REJECT * enter {embed_phrase} to embed into ipython * any other inputs ACCEPT system decision * (input is case insensitive) ''' ) ans_list_embed = ['cmd', 'ipy', 'embed'] ans_list_no = ['no', 'n'] #ans_list_yes = ['yes', 'y'] prompt_str = prompt_fmtstr.format( no_phrase=ut.conj_phrase(ans_list_no), embed_phrase=ut.conj_phrase(ans_list_embed), msg=msg, decisiontype=decisiontype, ) prompt_block = ut.msgblock('USER_INPUT', prompt_str) ans = input(prompt_block).lower() if ans in ans_list_embed: ut.embed() #print(ibs2.get_dbinfo_str()) #qreq_ = ut.search_stack_for_localvar('qreq_') #qreq_.normalizer elif ans in ans_list_no: return False else: return True
def grab_test_imgpath(key='lena.png', allow_external=True, verbose=True): r""" Gets paths to standard / fun test images. Downloads them if they dont exits Args: key (str): one of the standard test images, e.g. lena.png, carl.jpg, ... allow_external (bool): if True you can specify existing fpaths Returns: str: testimg_fpath - filepath to the downloaded or cached test image. SeeAlso: ut.get_valid_test_imgkeys CommandLine: python -m utool.util_grabdata --test-grab_test_imgpath Example: >>> # ENABLE_DOCTEST >>> from utool.util_grabdata import * # NOQA >>> import utool as ut >>> # build test data >>> key = 'carl.jpg' >>> # execute function >>> testimg_fpath = grab_test_imgpath(key) >>> # verify results >>> ut.assertpath(testimg_fpath) """ if allow_external and key not in TESTIMG_URL_DICT: testimg_fpath = key if not util_path.checkpath(testimg_fpath, verbose=True): import utool as ut raise AssertionError( 'testimg_fpath=%r not found did you mean %s' % ( testimg_fpath, ut.conj_phrase(get_valid_test_imgkeys(), 'or'))) else: testimg_fname = key testimg_url = TESTIMG_URL_DICT[key] testimg_fpath = grab_file_url(testimg_url, fname=testimg_fname, verbose=verbose) return testimg_fpath
def make_custom_interactions(simp_list): valid_vizmodes = ut.filter_startswith(dir(SimpleMatcher), 'visualize_') viz_index_ = [valid_vizmodes.index('visualize_matches')] def toggle_vizmode(iiter, actionkey, value, viz_index_=viz_index_): viz_index_[0] = (viz_index_[0] + 1) % len(valid_vizmodes) print('toggling') def set_param(iiter, actionkey, value, viz_index_=viz_index_): """ value = 'search_K=3' """ paramkey, paramval = value.split('=') print('parsing value=%r' % (value, )) def strip_quotes(str_): dq = ut.DOUBLE_QUOTE sq = ut.SINGLE_QUOTE return str_.strip(dq).strip(sq).strip(dq) # Sanatize paramkey = strip_quotes(paramkey.strip()) paramval = ut.smart_cast2(strip_quotes(paramval.strip())) print('setting cfgdict[%r]=%r' % (paramkey, paramval)) iiter.iterable[iiter.index][paramkey] = paramval offset_fnum_ = [0] def offset_fnum(iiter, actionkey, value, offset_fnum_=offset_fnum_): offset_fnum_[0] += len(simp_list) custom_actions = [ ('toggle', ['t'], 'toggles between ' + ut.conj_phrase(valid_vizmodes, 'and'), toggle_vizmode), ('offset_fnum', ['offset_fnum', 'o'], 'offset the figure number (keeps old figures)', offset_fnum), ('set_param', ['setparam', 's'], 'sets a config param using key=val format. eg: setparam ratio_thresh=.1', set_param), ] return custom_actions, valid_vizmodes, viz_index_, offset_fnum_
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 split_analysis(ibs): """ CommandLine: python -m ibeis.other.dbinfo split_analysis --show python -m ibeis split_analysis --show python -m ibeis split_analysis --show --good Ignore: # mount sshfs -o idmap=user lev:/ ~/lev # unmount fusermount -u ~/lev Example: >>> # DISABLE_DOCTEST GGR >>> from ibeis.other.dbinfo import * # NOQA >>> import ibeis >>> dbdir = '/media/danger/GGR/GGR-IBEIS' >>> dbdir = dbdir if ut.checkpath(dbdir) else ut.truepath('~/lev/media/danger/GGR/GGR-IBEIS') >>> ibs = ibeis.opendb(dbdir=dbdir, allow_newdir=False) >>> import guitool_ibeis as gt >>> gt.ensure_qtapp() >>> win = split_analysis(ibs) >>> ut.quit_if_noshow() >>> import plottool_ibeis as pt >>> gt.qtapp_loop(qwin=win) >>> #ut.show_if_requested() """ #nid_list = ibs.get_valid_nids(filter_empty=True) import datetime day1 = datetime.date(2016, 1, 30) day2 = datetime.date(2016, 1, 31) filter_kw = { 'multiple': None, #'view': ['right'], #'minqual': 'good', 'is_known': True, 'min_pername': 1, } aids1 = ibs.filter_annots_general(filter_kw=ut.dict_union( filter_kw, { 'min_unixtime': ut.datetime_to_posixtime(ut.date_to_datetime(day1, 0.0)), 'max_unixtime': ut.datetime_to_posixtime(ut.date_to_datetime(day1, 1.0)), }) ) aids2 = ibs.filter_annots_general(filter_kw=ut.dict_union( filter_kw, { 'min_unixtime': ut.datetime_to_posixtime(ut.date_to_datetime(day2, 0.0)), 'max_unixtime': ut.datetime_to_posixtime(ut.date_to_datetime(day2, 1.0)), }) ) all_aids = aids1 + aids2 all_annots = ibs.annots(all_aids) print('%d annots on day 1' % (len(aids1)) ) print('%d annots on day 2' % (len(aids2)) ) print('%d annots overall' % (len(all_annots)) ) print('%d names overall' % (len(ut.unique(all_annots.nids))) ) nid_list, annots_list = all_annots.group(all_annots.nids) REVIEWED_EDGES = True if REVIEWED_EDGES: aids_list = [annots.aids for annots in annots_list] #aid_pairs = [annots.get_am_aidpairs() for annots in annots_list] # Slower aid_pairs = ibs.get_unflat_am_aidpairs(aids_list) # Faster else: # ALL EDGES aid_pairs = [annots.get_aidpairs() for annots in annots_list] speeds_list = ibs.unflat_map(ibs.get_annotpair_speeds, aid_pairs) import vtool_ibeis as vt max_speeds = np.array([vt.safe_max(s, nans=False) for s in speeds_list]) nan_idx = np.where(np.isnan(max_speeds))[0] inf_idx = np.where(np.isinf(max_speeds))[0] bad_idx = sorted(ut.unique(ut.flatten([inf_idx, nan_idx]))) ok_idx = ut.index_complement(bad_idx, len(max_speeds)) print('#nan_idx = %r' % (len(nan_idx),)) print('#inf_idx = %r' % (len(inf_idx),)) print('#ok_idx = %r' % (len(ok_idx),)) ok_speeds = max_speeds[ok_idx] ok_nids = ut.take(nid_list, ok_idx) ok_annots = ut.take(annots_list, ok_idx) sortx = np.argsort(ok_speeds)[::-1] sorted_speeds = np.array(ut.take(ok_speeds, sortx)) sorted_annots = np.array(ut.take(ok_annots, sortx)) sorted_nids = np.array(ut.take(ok_nids, sortx)) # NOQA sorted_speeds = np.clip(sorted_speeds, 0, 100) #idx = vt.find_elbow_point(sorted_speeds) #EXCESSIVE_SPEED = sorted_speeds[idx] # http://www.infoplease.com/ipa/A0004737.html # http://www.speedofanimals.com/animals/zebra #ZEBRA_SPEED_MAX = 64 # km/h #ZEBRA_SPEED_RUN = 50 # km/h ZEBRA_SPEED_SLOW_RUN = 20 # km/h #ZEBRA_SPEED_FAST_WALK = 10 # km/h #ZEBRA_SPEED_WALK = 7 # km/h MAX_SPEED = ZEBRA_SPEED_SLOW_RUN #MAX_SPEED = ZEBRA_SPEED_WALK #MAX_SPEED = EXCESSIVE_SPEED flags = sorted_speeds > MAX_SPEED flagged_ok_annots = ut.compress(sorted_annots, flags) inf_annots = ut.take(annots_list, inf_idx) flagged_annots = inf_annots + flagged_ok_annots print('MAX_SPEED = %r km/h' % (MAX_SPEED,)) print('%d annots with infinite speed' % (len(inf_annots),)) print('%d annots with large speed' % (len(flagged_ok_annots),)) print('Marking all pairs of annots above the threshold as non-matching') from ibeis.algo.graph import graph_iden import networkx as nx progkw = dict(freq=1, bs=True, est_window=len(flagged_annots)) bad_edges_list = [] good_edges_list = [] for annots in ut.ProgIter(flagged_annots, lbl='flag speeding names', **progkw): edge_to_speeds = annots.get_speeds() bad_edges = [edge for edge, speed in edge_to_speeds.items() if speed > MAX_SPEED] good_edges = [edge for edge, speed in edge_to_speeds.items() if speed <= MAX_SPEED] bad_edges_list.append(bad_edges) good_edges_list.append(good_edges) all_bad_edges = ut.flatten(bad_edges_list) good_edges_list = ut.flatten(good_edges_list) print('num_bad_edges = %r' % (len(ut.flatten(bad_edges_list)),)) print('num_bad_edges = %r' % (len(ut.flatten(good_edges_list)),)) if 1: from ibeis.viz import viz_graph2 import guitool_ibeis as gt gt.ensure_qtapp() if ut.get_argflag('--good'): print('Looking at GOOD (no speed problems) edges') aid_pairs = good_edges_list else: print('Looking at BAD (speed problems) edges') aid_pairs = all_bad_edges aids = sorted(list(set(ut.flatten(aid_pairs)))) infr = graph_iden.AnnotInference(ibs, aids, verbose=False) infr.initialize_graph() # Use random scores to randomize sort order rng = np.random.RandomState(0) scores = (-rng.rand(len(aid_pairs)) * 10).tolist() infr.graph.add_edges_from(aid_pairs) if True: edge_sample_size = 250 pop_nids = ut.unique(ibs.get_annot_nids(ut.unique(ut.flatten(aid_pairs)))) sorted_pairs = ut.sortedby(aid_pairs, scores)[::-1][0:edge_sample_size] sorted_nids = ibs.get_annot_nids(ut.take_column(sorted_pairs, 0)) sample_size = len(ut.unique(sorted_nids)) am_rowids = ibs.get_annotmatch_rowid_from_undirected_superkey(*zip(*sorted_pairs)) flags = ut.not_list(ut.flag_None_items(am_rowids)) #am_rowids = ut.compress(am_rowids, flags) positive_tags = ['SplitCase', 'Photobomb'] flags_list = [ut.replace_nones(ibs.get_annotmatch_prop(tag, am_rowids), 0) for tag in positive_tags] print('edge_case_hist: ' + ut.repr3( ['%s %s' % (txt, sum(flags_)) for flags_, txt in zip(flags_list, positive_tags)])) is_positive = ut.or_lists(*flags_list) num_positive = sum(ut.lmap(any, ut.group_items(is_positive, sorted_nids).values())) pop = len(pop_nids) print('A positive is any edge flagged as a %s' % (ut.conj_phrase(positive_tags, 'or'),)) print('--- Sampling wrt edges ---') print('edge_sample_size = %r' % (edge_sample_size,)) print('edge_population_size = %r' % (len(aid_pairs),)) print('num_positive_edges = %r' % (sum(is_positive))) print('--- Sampling wrt names ---') print('name_population_size = %r' % (pop,)) vt.calc_error_bars_from_sample(sample_size, num_positive, pop, conf_level=.95) nx.set_edge_attributes(infr.graph, name='score', values=dict(zip(aid_pairs, scores))) win = viz_graph2.AnnotGraphWidget(infr=infr, use_image=False, init_mode=None) win.populate_edge_model() win.show() return win # Make review interface for only bad edges infr_list = [] iter_ = list(zip(flagged_annots, bad_edges_list)) for annots, bad_edges in ut.ProgIter(iter_, lbl='creating inference', **progkw): aids = annots.aids nids = [1] * len(aids) infr = graph_iden.AnnotInference(ibs, aids, nids, verbose=False) infr.initialize_graph() infr.reset_feedback() infr_list.append(infr) # Check which ones are user defined as incorrect #num_positive = 0 #for infr in infr_list: # flag = np.any(infr.get_feedback_probs()[0] == 0) # num_positive += flag #print('num_positive = %r' % (num_positive,)) #pop = len(infr_list) #print('pop = %r' % (pop,)) iter_ = list(zip(infr_list, bad_edges_list)) for infr, bad_edges in ut.ProgIter(iter_, lbl='adding speed edges', **progkw): flipped_edges = [] for aid1, aid2 in bad_edges: if infr.graph.has_edge(aid1, aid2): flipped_edges.append((aid1, aid2)) infr.add_feedback((aid1, aid2), NEGTV) nx.set_edge_attributes(infr.graph, name='_speed_split', values='orig') nx.set_edge_attributes(infr.graph, name='_speed_split', values={edge: 'new' for edge in bad_edges}) nx.set_edge_attributes(infr.graph, name='_speed_split', values={edge: 'flip' for edge in flipped_edges}) #for infr in ut.ProgIter(infr_list, lbl='flagging speeding edges', **progkw): # annots = ibs.annots(infr.aids) # edge_to_speeds = annots.get_speeds() # bad_edges = [edge for edge, speed in edge_to_speeds.items() if speed > MAX_SPEED] def inference_stats(infr_list_): relabel_stats = [] for infr in infr_list_: num_ccs, num_inconsistent = infr.relabel_using_reviews() state_hist = ut.dict_hist(nx.get_edge_attributes(infr.graph, 'decision').values()) if POSTV not in state_hist: state_hist[POSTV] = 0 hist = ut.dict_hist(nx.get_edge_attributes(infr.graph, '_speed_split').values()) subgraphs = infr.positive_connected_compoments() subgraph_sizes = [len(g) for g in subgraphs] info = ut.odict([ ('num_nonmatch_edges', state_hist[NEGTV]), ('num_match_edges', state_hist[POSTV]), ('frac_nonmatch_edges', state_hist[NEGTV] / (state_hist[POSTV] + state_hist[NEGTV])), ('num_inconsistent', num_inconsistent), ('num_ccs', num_ccs), ('edges_flipped', hist.get('flip', 0)), ('edges_unchanged', hist.get('orig', 0)), ('bad_unreviewed_edges', hist.get('new', 0)), ('orig_size', len(infr.graph)), ('new_sizes', subgraph_sizes), ]) relabel_stats.append(info) return relabel_stats relabel_stats = inference_stats(infr_list) print('\nAll Split Info:') lines = [] for key in relabel_stats[0].keys(): data = ut.take_column(relabel_stats, key) if key == 'new_sizes': data = ut.flatten(data) lines.append('stats(%s) = %s' % (key, ut.repr2(ut.get_stats(data, use_median=True), precision=2))) print('\n'.join(ut.align_lines(lines, '='))) num_incon_list = np.array(ut.take_column(relabel_stats, 'num_inconsistent')) can_split_flags = num_incon_list == 0 print('Can trivially split %d / %d' % (sum(can_split_flags), len(can_split_flags))) splittable_infrs = ut.compress(infr_list, can_split_flags) relabel_stats = inference_stats(splittable_infrs) print('\nTrival Split Info:') lines = [] for key in relabel_stats[0].keys(): if key in ['num_inconsistent']: continue data = ut.take_column(relabel_stats, key) if key == 'new_sizes': data = ut.flatten(data) lines.append('stats(%s) = %s' % ( key, ut.repr2(ut.get_stats(data, use_median=True), precision=2))) print('\n'.join(ut.align_lines(lines, '='))) num_match_edges = np.array(ut.take_column(relabel_stats, 'num_match_edges')) num_nonmatch_edges = np.array(ut.take_column(relabel_stats, 'num_nonmatch_edges')) flags1 = np.logical_and(num_match_edges > num_nonmatch_edges, num_nonmatch_edges < 3) reasonable_infr = ut.compress(splittable_infrs, flags1) new_sizes_list = ut.take_column(relabel_stats, 'new_sizes') flags2 = [len(sizes) == 2 and sum(sizes) > 4 and (min(sizes) / max(sizes)) > .3 for sizes in new_sizes_list] reasonable_infr = ut.compress(splittable_infrs, flags2) print('#reasonable_infr = %r' % (len(reasonable_infr),)) for infr in ut.InteractiveIter(reasonable_infr): annots = ibs.annots(infr.aids) edge_to_speeds = annots.get_speeds() print('max_speed = %r' % (max(edge_to_speeds.values())),) infr.initialize_visual_node_attrs() infr.show_graph(use_image=True, only_reviewed=True) rest = ~np.logical_or(flags1, flags2) nonreasonable_infr = ut.compress(splittable_infrs, rest) rng = np.random.RandomState(0) random_idx = ut.random_indexes(len(nonreasonable_infr) - 1, 15, rng=rng) random_infr = ut.take(nonreasonable_infr, random_idx) for infr in ut.InteractiveIter(random_infr): annots = ibs.annots(infr.aids) edge_to_speeds = annots.get_speeds() print('max_speed = %r' % (max(edge_to_speeds.values())),) infr.initialize_visual_node_attrs() infr.show_graph(use_image=True, only_reviewed=True) #import scipy.stats as st #conf_interval = .95 #st.norm.cdf(conf_interval) # view-source:http://www.surveysystem.com/sscalc.htm #zval = 1.96 # 95 percent confidence #zValC = 3.8416 # #zValC = 6.6564 #import statsmodels.stats.api as sms #es = sms.proportion_effectsize(0.5, 0.75) #sms.NormalIndPower().solve_power(es, power=0.9, alpha=0.05, ratio=1) pop = 279 num_positive = 3 sample_size = 15 conf_level = .95 #conf_level = .99 vt.calc_error_bars_from_sample(sample_size, num_positive, pop, conf_level) print('---') vt.calc_error_bars_from_sample(sample_size + 38, num_positive, pop, conf_level) print('---') vt.calc_error_bars_from_sample(sample_size + 38 / 3, num_positive, pop, conf_level) print('---') vt.calc_error_bars_from_sample(15 + 38, num_positive=3, pop=675, conf_level=.95) vt.calc_error_bars_from_sample(15, num_positive=3, pop=675, conf_level=.95) pop = 279 #err_frac = .05 # 5% err_frac = .10 # 10% conf_level = .95 vt.calc_sample_from_error_bars(err_frac, pop, conf_level) pop = 675 vt.calc_sample_from_error_bars(err_frac, pop, conf_level) vt.calc_sample_from_error_bars(.05, pop, conf_level=.95, prior=.1) vt.calc_sample_from_error_bars(.05, pop, conf_level=.68, prior=.2) vt.calc_sample_from_error_bars(.10, pop, conf_level=.68) vt.calc_error_bars_from_sample(100, num_positive=5, pop=675, conf_level=.95) vt.calc_error_bars_from_sample(100, num_positive=5, pop=675, conf_level=.68)
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')