def get_annotmatch_rowids_from_aid2(ibs, aid2_list, eager=True, nInput=None, force_method=None): """ # This one is slow because aid2 is the second part of the index TODO autogenerate Returns a list of the aids that were reviewed as candidate matches to the input aid aid_list = ibs.get_valid_aids() CommandLine: python -m ibeis.annotmatch_funcs --exec-get_annotmatch_rowids_from_aid2 --show Example2: >>> # TIME TEST >>> # setup_pzmtest_subgraph() >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='PZ_Master1') >>> aid2_list = ibs.get_valid_aids() >>> func_list = [ >>> partial(ibs.get_annotmatch_rowids_from_aid2, force_method=1), >>> partial(ibs.get_annotmatch_rowids_from_aid2, force_method=2), >>> ] >>> num_list = [1, 10, 50, 100, 300, 325, 350, 400, 500] >>> def args_list(count, aid2_list=aid2_list, num_list=num_list): >>> return (aid2_list[0:num_list[count]],) >>> searchkw = dict( >>> func_labels=['sql', 'numpy'], >>> count_to_xtick=lambda count, args: len(args[0]), >>> title='Timings of get_annotmatch_rowids_from_aid2', >>> ) >>> niters = len(num_list) >>> time_result = ut.gridsearch_timer(func_list, args_list, niters, **searchkw) >>> time_result['plot_timings']() >>> ut.show_if_requested() """ from ibeis.control import _autogen_annotmatch_funcs if force_method != 2 and (nInput < 128 or (force_method == 1)): colnames = (_autogen_annotmatch_funcs.ANNOTMATCH_ROWID,) # FIXME: col_rowid is not correct params_iter = zip(aid2_list) andwhere_colnames = [_autogen_annotmatch_funcs.ANNOT_ROWID2] annotmatch_rowid_list = ibs.db.get_where2( ibs.const.ANNOTMATCH_TABLE, colnames, params_iter, andwhere_colnames, eager=eager, nInput=nInput, unpack_scalars=False) elif force_method == 2: import vtool as vt all_annotmatch_rowids = np.array(ibs._get_all_annotmatch_rowids()) aids2 = np.array(ibs.get_annotmatch_aid2(all_annotmatch_rowids)) unique_aid2, groupxs2 = vt.group_indices(aids2) rowids2_ = vt.apply_grouping(all_annotmatch_rowids, groupxs2) rowids2_ = [_.tolist() for _ in rowids2_] maping2 = ut.defaultdict(list, zip(unique_aid2, rowids2_)) annotmatch_rowid_list = ut.dict_take(maping2, aid2_list) annotmatch_rowid_list = list(map(sorted, annotmatch_rowid_list)) return annotmatch_rowid_list
def get_annotmatch_rowids_from_aid2(ibs, aid2_list, eager=True, nInput=None, force_method=None): """ # This one is slow because aid2 is the second part of the index TODO autogenerate Returns a list of the aids that were reviewed as candidate matches to the input aid aid_list = ibs.get_valid_aids() CommandLine: python -m ibeis.annotmatch_funcs --exec-get_annotmatch_rowids_from_aid2 --show Example2: >>> # TIME TEST >>> # setup_pzmtest_subgraph() >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='PZ_Master1') >>> aid2_list = ibs.get_valid_aids() >>> func_list = [ >>> partial(ibs.get_annotmatch_rowids_from_aid2, force_method=1), >>> partial(ibs.get_annotmatch_rowids_from_aid2, force_method=2), >>> ] >>> num_list = [1, 10, 50, 100, 300, 325, 350, 400, 500] >>> def args_list(count, aid2_list=aid2_list, num_list=num_list): >>> return (aid2_list[0:num_list[count]],) >>> searchkw = dict( >>> func_labels=['sql', 'numpy'], >>> count_to_xtick=lambda count, args: len(args[0]), >>> title='Timings of get_annotmatch_rowids_from_aid2', >>> ) >>> niters = len(num_list) >>> time_result = ut.gridsearch_timer(func_list, args_list, niters, **searchkw) >>> time_result['plot_timings']() >>> ut.show_if_requested() """ from ibeis.control import _autogen_annotmatch_funcs if force_method != 2 and (nInput < 128 or (force_method == 1)): colnames = (_autogen_annotmatch_funcs.ANNOTMATCH_ROWID, ) # FIXME: col_rowid is not correct params_iter = zip(aid2_list) andwhere_colnames = [_autogen_annotmatch_funcs.ANNOT_ROWID2] annotmatch_rowid_list = ibs.db.get_where2(ibs.const.ANNOTMATCH_TABLE, colnames, params_iter, andwhere_colnames, eager=eager, nInput=nInput, unpack_scalars=False) elif force_method == 2: import vtool as vt all_annotmatch_rowids = np.array(ibs._get_all_annotmatch_rowids()) aids2 = np.array(ibs.get_annotmatch_aid2(all_annotmatch_rowids)) unique_aid2, groupxs2 = vt.group_indices(aids2) rowids2_ = vt.apply_grouping(all_annotmatch_rowids, groupxs2) rowids2_ = [_.tolist() for _ in rowids2_] maping2 = ut.defaultdict(list, zip(unique_aid2, rowids2_)) annotmatch_rowid_list = ut.dict_take(maping2, aid2_list) annotmatch_rowid_list = list(map(sorted, annotmatch_rowid_list)) return annotmatch_rowid_list
def get_annotmatch_rowids_from_aid(ibs, aid_list, eager=True, nInput=None, force_method=None): """ Undirected version TODO autogenerate Returns a list of the aids that were reviewed as candidate matches to the input aid aid_list = ibs.get_valid_aids() CommandLine: python -m ibeis.annotmatch_funcs --exec-get_annotmatch_rowids_from_aid python -m ibeis.annotmatch_funcs --exec-get_annotmatch_rowids_from_aid:1 --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> # setup_pzmtest_subgraph() >>> ibs = ibeis.opendb(defaultdb='PZ_MTEST') >>> aid_list = ibs.get_valid_aids()[0:4] >>> eager = True >>> nInput = None >>> annotmatch_rowid_list = get_annotmatch_rowids_from_aid(ibs, aid_list, >>> eager, nInput) >>> result = ('annotmatch_rowid_list = %s' % (str(annotmatch_rowid_list),)) >>> print(result) Example2: >>> # TIME TEST >>> # setup_pzmtest_subgraph() >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='PZ_Master1') >>> aid_list = ibs.get_valid_aids() >>> from functools import partial >>> func_list = [ >>> partial(ibs.get_annotmatch_rowids_from_aid), >>> partial(ibs.get_annotmatch_rowids_from_aid, force_method=1), >>> partial(ibs.get_annotmatch_rowids_from_aid, force_method=2), >>> ] >>> num_list = [1, 10, 50, 100, 300, 325, 350, 400, 500] >>> def args_list(count, aid_list=aid_list, num_list=num_list): >>> return (aid_list[0:num_list[count]],) >>> searchkw = dict( >>> func_labels=['combo', 'sql', 'numpy'], >>> count_to_xtick=lambda count, args: len(args[0]), >>> title='Timings of get_annotmatch_rowids_from_aid', >>> ) >>> niters = len(num_list) >>> time_result = ut.gridsearch_timer(func_list, args_list, niters, **searchkw) >>> time_result['plot_timings']() >>> ut.show_if_requested() """ from ibeis.control import _autogen_annotmatch_funcs if nInput is None: nInput = len(aid_list) if force_method != 2 and (nInput < 256 or (force_method == 1)): rowids1 = ibs.get_annotmatch_rowids_from_aid1(aid_list) # This one is slow because aid2 is the second part of the index rowids2 = ibs.get_annotmatch_rowids_from_aid2(aid_list) annotmatch_rowid_list = list(map(ut.flatten, zip(rowids1, rowids2))) # NOQA else: # This is much much faster than the other methods for large queries import vtool as vt all_annotmatch_rowids = np.array(ibs._get_all_annotmatch_rowids()) aids1 = np.array(ibs.get_annotmatch_aid1(all_annotmatch_rowids)) aids2 = np.array(ibs.get_annotmatch_aid2(all_annotmatch_rowids)) unique_aid1, groupxs1 = vt.group_indices(aids1) unique_aid2, groupxs2 = vt.group_indices(aids2) rowids1_ = vt.apply_grouping(all_annotmatch_rowids, groupxs1) rowids2_ = vt.apply_grouping(all_annotmatch_rowids, groupxs2) rowids1_ = [_.tolist() for _ in rowids1_] rowids2_ = [_.tolist() for _ in rowids2_] maping1 = dict(zip(unique_aid1, rowids1_)) maping2 = dict(zip(unique_aid2, rowids2_)) mapping = ut.defaultdict(list, ut.dict_union3(maping1, maping2)) annotmatch_rowid_list = ut.dict_take(mapping, aid_list) if False: # VERY SLOW colnames = (_autogen_annotmatch_funcs.ANNOTMATCH_ROWID, ) # FIXME: col_rowid is not correct params_iter = list(zip(aid_list, aid_list)) where_colnames = [ _autogen_annotmatch_funcs.ANNOT_ROWID1, _autogen_annotmatch_funcs.ANNOT_ROWID2 ] with ut.Timer('one'): annotmatch_rowid_list1 = ibs.db.get_where3( # NOQA ibs.const.ANNOTMATCH_TABLE, colnames, params_iter, where_colnames, logicop='OR', eager=eager, nInput=nInput, unpack_scalars=False) # Ensure funciton output is consistent annotmatch_rowid_list = list(map(sorted, annotmatch_rowid_list)) return annotmatch_rowid_list
def get_annotmatch_rowids_from_aid(ibs, aid_list, eager=True, nInput=None, force_method=None): """ Undirected version TODO autogenerate Returns a list of the aids that were reviewed as candidate matches to the input aid aid_list = ibs.get_valid_aids() CommandLine: python -m ibeis.annotmatch_funcs --exec-get_annotmatch_rowids_from_aid python -m ibeis.annotmatch_funcs --exec-get_annotmatch_rowids_from_aid:1 --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> # setup_pzmtest_subgraph() >>> ibs = ibeis.opendb(defaultdb='PZ_MTEST') >>> aid_list = ibs.get_valid_aids()[0:4] >>> eager = True >>> nInput = None >>> annotmatch_rowid_list = get_annotmatch_rowids_from_aid(ibs, aid_list, >>> eager, nInput) >>> result = ('annotmatch_rowid_list = %s' % (str(annotmatch_rowid_list),)) >>> print(result) Example2: >>> # TIME TEST >>> # setup_pzmtest_subgraph() >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='PZ_Master1') >>> aid_list = ibs.get_valid_aids() >>> from functools import partial >>> func_list = [ >>> partial(ibs.get_annotmatch_rowids_from_aid), >>> partial(ibs.get_annotmatch_rowids_from_aid, force_method=1), >>> partial(ibs.get_annotmatch_rowids_from_aid, force_method=2), >>> ] >>> num_list = [1, 10, 50, 100, 300, 325, 350, 400, 500] >>> def args_list(count, aid_list=aid_list, num_list=num_list): >>> return (aid_list[0:num_list[count]],) >>> searchkw = dict( >>> func_labels=['combo', 'sql', 'numpy'], >>> count_to_xtick=lambda count, args: len(args[0]), >>> title='Timings of get_annotmatch_rowids_from_aid', >>> ) >>> niters = len(num_list) >>> time_result = ut.gridsearch_timer(func_list, args_list, niters, **searchkw) >>> time_result['plot_timings']() >>> ut.show_if_requested() """ from ibeis.control import _autogen_annotmatch_funcs if nInput is None: nInput = len(aid_list) if force_method != 2 and (nInput < 256 or (force_method == 1)): rowids1 = ibs.get_annotmatch_rowids_from_aid1(aid_list) # This one is slow because aid2 is the second part of the index rowids2 = ibs.get_annotmatch_rowids_from_aid2(aid_list) annotmatch_rowid_list = list(map(ut.flatten, zip(rowids1, rowids2))) # NOQA else: # This is much much faster than the other methods for large queries import vtool as vt all_annotmatch_rowids = np.array(ibs._get_all_annotmatch_rowids()) aids1 = np.array(ibs.get_annotmatch_aid1(all_annotmatch_rowids)) aids2 = np.array(ibs.get_annotmatch_aid2(all_annotmatch_rowids)) unique_aid1, groupxs1 = vt.group_indices(aids1) unique_aid2, groupxs2 = vt.group_indices(aids2) rowids1_ = vt.apply_grouping(all_annotmatch_rowids, groupxs1) rowids2_ = vt.apply_grouping(all_annotmatch_rowids, groupxs2) rowids1_ = [_.tolist() for _ in rowids1_] rowids2_ = [_.tolist() for _ in rowids2_] maping1 = dict(zip(unique_aid1, rowids1_)) maping2 = dict(zip(unique_aid2, rowids2_)) mapping = ut.defaultdict(list, ut.dict_union3(maping1, maping2)) annotmatch_rowid_list = ut.dict_take(mapping, aid_list) if False: # VERY SLOW colnames = (_autogen_annotmatch_funcs.ANNOTMATCH_ROWID,) # FIXME: col_rowid is not correct params_iter = list(zip(aid_list, aid_list)) where_colnames = [_autogen_annotmatch_funcs.ANNOT_ROWID1, _autogen_annotmatch_funcs.ANNOT_ROWID2] with ut.Timer('one'): annotmatch_rowid_list1 = ibs.db.get_where3( # NOQA ibs.const.ANNOTMATCH_TABLE, colnames, params_iter, where_colnames, logicop='OR', eager=eager, nInput=nInput, unpack_scalars=False) # Ensure funciton output is consistent annotmatch_rowid_list = list(map(sorted, annotmatch_rowid_list)) return annotmatch_rowid_list