Example #1
0
def _init_mpl_mainprocess(verbose=VERBOSE_MPLINIT):
    global __IS_INITIALIZED__
    global __WHO_INITIALIZED__
    import matplotlib as mpl

    # mpl.interactive(True)
    current_backend = mpl.get_backend()
    target_backend = get_target_backend()
    if __IS_INITIALIZED__ is True:
        if verbose:
            print(
                '[!plottool] matplotlib has already been initialized.  backend=%r'
                % current_backend
            )
            print('[!plottool] Initially initialized by %r' % __WHO_INITIALIZED__)
            print(
                '[!plottool] Trying to be init by %r'
                % (ut.get_caller_name(N=range(0, 5)))
            )
        return False
    __IS_INITIALIZED__ = True

    if verbose:
        print('[plottool] matplotlib initialized by %r' % __WHO_INITIALIZED__)
        __WHO_INITIALIZED__ = ut.get_caller_name(N=range(0, 5))
    if verbose:
        print('--- INIT MPL---')
        print('[pt] current backend is: %r' % current_backend)
        print('[pt] mpl.use(%r)' % target_backend)
    if current_backend != target_backend:
        _mpl_set_backend(target_backend)
    _init_mpl_rcparams()
Example #2
0
def _init_mpl_mainprocess(verbose=VERBOSE_MPLINIT):
    global __IS_INITIALIZED__
    global __WHO_INITIALIZED__
    import matplotlib as mpl
    #mpl.interactive(True)
    current_backend = mpl.get_backend()
    target_backend = get_target_backend()
    if __IS_INITIALIZED__ is True:
        if verbose:
            print('[!plottool] matplotlib has already been initialized.  backend=%r' % current_backend)
            print('[!plottool] Initially initialized by %r' % __WHO_INITIALIZED__)
            print('[!plottool] Trying to be init by %r' % (ut.get_caller_name(N=range(0, 5))))
        return False
    __IS_INITIALIZED__ = True

    if verbose:
        print('[plottool] matplotlib initialized by %r' % __WHO_INITIALIZED__)
        __WHO_INITIALIZED__ = ut.get_caller_name(N=range(0, 5))
    if verbose:
        print('--- INIT MPL---')
        print('[pt] current backend is: %r' % current_backend)
        print('[pt] mpl.use(%r)' % target_backend)
    if current_backend != target_backend:
        _mpl_set_backend(target_backend)
    _init_mpl_rcparams()
Example #3
0
 def utool_print(*args):
     """ debugging utool print function """
     import utool as ut
     utool_flush()
     endline = '\n'
     __UTOOL_ROOT_LOGGER__.info('\n\n----------')
     __UTOOL_ROOT_LOGGER__.info(ut.get_caller_name(range(0, 20)))
     return  __UTOOL_ROOT_LOGGER__.info(', '.join(map(six.text_type, args)) + endline)
Example #4
0
 def utool_print(*args):
     """ debugging utool print function """
     import utool as ut
     utool_flush()
     endline = '\n'
     __UTOOL_ROOT_LOGGER__.info('\n\n----------')
     __UTOOL_ROOT_LOGGER__.info(ut.get_caller_name(range(0, 20)))
     return __UTOOL_ROOT_LOGGER__.info(
         ', '.join(map(six.text_type, args)) + endline)
Example #5
0
def ishow_image(ibs, gid, sel_aids=[], fnum=None, select_callback=None,
                **kwargs):
    if ut.VERBOSE:
        print(ut.get_caller_name(range(9)))
        print('[interact_image] gid=%r fnum=%r' % (gid, fnum,))
    if fnum is None:
        fnum = df2.next_fnum()
    # TODO: change to class based structure
    self = ut.DynStruct()
    self.fnum = fnum

    fig = ih.begin_interaction('image', fnum)
    #printDBG(utool.func_str(interact_image, [], locals()))
    kwargs['draw_lbls'] = kwargs.get('draw_lbls', True)

    def _image_view(sel_aids=sel_aids, **_kwargs):
        try:
            viz.show_image(ibs, gid, sel_aids=sel_aids, fnum=self.fnum, **_kwargs)
            df2.set_figtitle('Image View')
        except TypeError as ex:
            ut.printex(ex, ut.dict_str(_kwargs))
            raise

    # Create callback wrapper
    def _on_image_click(event):
        printDBG('[inter] clicked image')
        if ih.clicked_outside_axis(event):
            # Toggle draw lbls
            kwargs['draw_lbls'] = not kwargs.get('draw_lbls', True)
            _image_view(**kwargs)
        else:
            ax          = event.inaxes
            viztype     = vh.get_ibsdat(ax, 'viztype')
            annotation_centers = vh.get_ibsdat(ax, 'annotation_centers', default=[])
            printDBG(' annotation_centers=%r' % annotation_centers)
            printDBG(' viztype=%r' % viztype)
            if len(annotation_centers) == 0:
                print(' ...no chips exist to click')
                return
            x, y = event.xdata, event.ydata
            # Find ANNOTATION center nearest to the clicked point
            aid_list = vh.get_ibsdat(ax, 'aid_list', default=[])
            centx, _dist = ut.nearest_point(x, y, annotation_centers)
            aid = aid_list[centx]
            print(' ...clicked aid=%r' % aid)
            if select_callback is not None:
                # HACK, should just implement this correctly here
                select_callback(gid, sel_aids=[aid], fnum=self.fnum)
            else:
                _image_view(sel_aids=[aid])

        viz.draw()

    _image_view(**kwargs)
    viz.draw()
    ih.connect_callback(fig, 'button_press_event', _on_image_click)
Example #6
0
 def wrp_setter(*args, **kwargs):
     if DEBUG_SETTERS or VERB_CONTROL:
         print("+------")
         print("[SET]: " + get_funcname(func))
         print("[SET]: called by: " + ut.get_caller_name(range(1, 7)))
         funccall_str = ut.func_str(func, args, kwargs, packed=True)
         print("\n" + funccall_str + "\n")
         print("L------")
         # builtins.print('\n' + funccall_str + '\n')
     # print('set: funcname=%r, args=%r, kwargs=%r' % (get_funcname(func), args, kwargs))
     return func_(*args, **kwargs)
Example #7
0
 def wrp_setter(*args, **kwargs):
     if DEBUG_SETTERS or VERB_CONTROL:
         print('+------')
         print('[SET]: ' + get_funcname(func))
         print('[SET]: called by: ' + ut.get_caller_name(range(1, 7)))
         funccall_str = ut.func_str(func, args, kwargs, packed=True)
         print('\n' + funccall_str + '\n')
         print('L------')
         #builtins.print('\n' + funccall_str + '\n')
     #print('set: funcname=%r, args=%r, kwargs=%r' % (get_funcname(func), args, kwargs))
     return func_(*args, **kwargs)
def _run_benchmark(setup_, func_list, argstr, number=1000):
    import timeit
    setup = GLOBAL_SETUP + '\n' + setup_
    print('----------')
    print('BENCHMARK: ' + utool.get_caller_name())
    for func in func_list:
        funcname = func if isinstance(func, str) else get_funcname(func)
        print('Running: %s' % funcname)
        stmt = funcname + argstr
        try:
            total_time = timeit.timeit(stmt=stmt, setup=setup, number=number)
        except ImportError as ex:
            utool.printex(ex, iswarning=True)
        except Exception as ex:
            utool.printex(ex, iswarning=False)
            raise
        print(' * timed: %r seconds in %s' % (total_time, funcname))
    return locals()
Example #9
0
def _run_benchmark(setup_, func_list, argstr, number=1000):
    import timeit

    setup = GLOBAL_SETUP + "\n" + setup_
    print("----------")
    print("BENCHMARK: " + utool.get_caller_name())
    for func in func_list:
        funcname = func if isinstance(func, str) else get_funcname(func)
        print("Running: %s" % funcname)
        stmt = funcname + argstr
        try:
            total_time = timeit.timeit(stmt=stmt, setup=setup, number=number)
        except ImportError as ex:
            utool.printex(ex, iswarning=True)
        except Exception as ex:
            utool.printex(ex, iswarning=False)
            raise
        print(" * timed: %r seconds in %s" % (total_time, funcname))
    return locals()
Example #10
0
    def set(db, tblname, colnames, val_iter, id_iter, id_colname='rowid', **kwargs):
        """ setter """
        assert isinstance(colnames, tuple)
        #if isinstance(colnames, (str, unicode)):
        #    colnames = (colnames,)
        val_list = list(val_iter)  # eager evaluation
        id_list = list(id_iter)  # eager evaluation
        if not QUIET and VERBOSE:
            print('[sql] SETTER: ' + utool.get_caller_name())
            print('[sql] * tblname=%r' % (tblname,))
            print('[sql] * val_list=%r' % (val_list,))
            print('[sql] * id_list=%r' % (id_list,))
            print('[sql] * id_colname=%r' % (id_colname,))
        try:
            num_val = len(val_list)
            num_id = len(id_list)
            assert num_val == num_id, 'list inputs have different lengths'
        except AssertionError as ex:
            utool.printex(ex, key_list=['num_val', 'num_id'])
            raise
        fmtdict = {
            'tblname_str'  : tblname,
            'assign_str'   : ',\n'.join(['%s=?' % name for name in colnames]),
            'where_clause' : (id_colname + '=?'),
        }
        operation_fmt = '''
            UPDATE {tblname_str}
            SET {assign_str}
            WHERE {where_clause}
            '''

        # TODO: The flattenize can be removed if we pass in val_lists instead
        params_iter = utool.flattenize(list(zip(val_list, id_list)))
        #params_iter = list(zip(val_list, id_list))
        return db._executemany_operation_fmt(operation_fmt, fmtdict,
                                             params_iter=params_iter, **kwargs)
Example #11
0
def ishow_image(ibs,
                gid,
                sel_aids=[],
                fnum=None,
                select_callback=None,
                **kwargs):
    if ut.VERBOSE:
        print(ut.get_caller_name(range(9)))
        print('[interact_image] gid=%r fnum=%r' % (gid, fnum))
    if fnum is None:
        fnum = df2.next_fnum()
    # TODO: change to class based structure
    self = ut.DynStruct()
    self.fnum = fnum

    fig = ih.begin_interaction('image', fnum)
    # printDBG(utool.func_str(interact_image, [], locals()))
    kwargs['draw_lbls'] = kwargs.get('draw_lbls', True)

    def _image_view(sel_aids=sel_aids, **_kwargs):
        try:
            viz.show_image(ibs,
                           gid,
                           sel_aids=sel_aids,
                           fnum=self.fnum,
                           **_kwargs)
            df2.set_figtitle('Image View')
        except TypeError as ex:
            ut.printex(ex, ut.repr2(_kwargs))
            raise

    # Create callback wrapper
    def _on_image_click(event):
        print('[inter] clicked image')
        if ih.clicked_outside_axis(event):
            # Toggle draw lbls
            kwargs['draw_lbls'] = not kwargs.get('draw_lbls', True)
            _image_view(**kwargs)
        else:
            ax = event.inaxes
            viztype = vh.get_ibsdat(ax, 'viztype')
            annotation_centers = vh.get_ibsdat(ax,
                                               'annotation_centers',
                                               default=[])
            print(' annotation_centers=%r' % annotation_centers)
            print(' viztype=%r' % viztype)
            if len(annotation_centers) == 0:
                print(' ...no chips exist to click')
                return
            x, y = event.xdata, event.ydata
            # Find ANNOTATION center nearest to the clicked point
            aid_list = vh.get_ibsdat(ax, 'aid_list', default=[])
            import vtool as vt

            centx, _dist = vt.nearest_point(x, y, annotation_centers)
            aid = aid_list[centx]
            print(' ...clicked aid=%r' % aid)
            if select_callback is not None:
                # HACK, should just implement this correctly here
                select_callback(gid, sel_aids=[aid], fnum=self.fnum)
            else:
                _image_view(sel_aids=[aid])

        viz.draw()

    _image_view(**kwargs)
    viz.draw()
    ih.connect_callback(fig, 'button_press_event', _on_image_click)
Example #12
0
def ensure_correct_version(ibs, db, version_expected, schema_spec,
                           dobackup=True,
                           verbose=ut.NOT_QUIET):
    """
    FIXME: AN SQL HELPER FUNCTION SHOULD BE AGNOSTIC TO CONTROLER OBJECTS

    ensure_correct_version

    Args:
        ibs (IBEISController):
        db (SQLController):
        version_expected (str): version you want to be at
        schema_spec (module): schema module
        dobackup (bool):

    Example:
        >>> from ibeis.control._sql_helpers import *  # NOQA
        >>> ibs = '?'
        >>> db = ibs.db
        >>> version_expected = ibs.db_version_expected
        >>> schema_spec = DB_SCHEMA
        >>> dobackup = True
        >>> result = ensure_correct_version(ibs, db, version_expected, schema_spec, dobackup)
        >>> print(result)

    Args:
        schema_spec (module): module of schema specifications
    """
    from ibeis import constants as const
    from ibeis import params
    #print('[SQL_] ensure_correct_version')
    force_incremental = params.args.force_incremental_db_update
    want_base_version = version_expected == const.BASE_DATABASE_VERSION
    if want_base_version:
        print('[SQL_] base version expected... returning')
        # Nothing to do. autogenerated file is pointless
        return
    version = db.get_db_version()
    # NEW DATABASE CONDITION
    is_base_version = (version == const.BASE_DATABASE_VERSION)
    # <DEBUG>
    #if ut.get_flag('--verbsql') or ut.VERBOSE or True:
    #    key_list = locals().keys()
    #    keystr_list = sorted(ut.parse_locals_keylist(locals(), key_list))
    #    print('KEYLIST:' + ut.indentjoin(keystr_list, '\n * '))
    # </DEBUG>
    #+-----------------------------------
    # SKIP TO CURRENT VERSION IF POSSIBLE
    #+-----------------------------------
    can_skip = is_base_version and not force_incremental
    if can_skip:
        #print('[SQL_] we can skip')
        # Check to see if a prebuilt current schema_spec module exists
        current_schema_exists = (schema_spec.UPDATE_CURRENT is not None and
                                 schema_spec.VERSION_CURRENT is not None)
        if current_schema_exists:
            # check to see if more than the metadata table exists
            is_newdb = db.get_table_names() == [const.METADATA_TABLE]
            current_schema_compatible = (
                is_newdb and schema_spec.VERSION_CURRENT <= version_expected)
            if current_schema_compatible:
                # Since this is a new database, we do not have to worry about backinng up the
                # current database.  The subsequent update functions (if needed) will handle
                # this for us.
                if verbose:
                    print('[_SQL] New database and a current schema found')
                schema_spec.UPDATE_CURRENT(db, ibs=ibs)
                db.set_db_version(schema_spec.VERSION_CURRENT)
                if verbose:
                    print('[_SQL] Database version updated (skipped) to %r ' % (schema_spec.VERSION_CURRENT))
            else:
                print('[_SQL] Current database is not compatible, updating incrementally...')
        else:
            print('[_SQL] New database but current version not exported, updating incrementally...')
    #+--------------------------------------
    # INCREMENTAL UPDATE TO EXPECTED VERSION
    #+--------------------------------------
    # Check version again for sanity's sake, update if exported current is behind expected
    version = db.get_db_version()
    if verbose:
        print('[_SQL.%s] Database version: %r | Expected version: %r ' %
                (ut.get_caller_name(), version, version_expected))
    if version < version_expected:
        print('[_SQL] Database version behind, updating...')
        update_schema_version(ibs, db, schema_spec, version, version_expected,
                              dobackup=dobackup)
        db.set_db_version(version_expected)
        print('[_SQL] Database version updated (incrementally) to %r' %
                   (version_expected))
    elif version > version_expected:
        msg = (('[_SQL] ERROR: '
                'Expected database version behind. expected: %r. got: %r') %
               (version_expected, version))
        raise AssertionError(msg)
Example #13
0
 def lazy_checks(model):
     if model.lazy_updater is not None:
         print('[model] lazy update %r caller %r: ' %
               (model.name, ut.get_caller_name(N=range(4))))
         model.lazy_updater()
         model.lazy_updater = None
Example #14
0
def invindex_dbgstr(invindex):
    """
    >>> from ibeis.algo.hots.smk.smk_debug import *  # NOQA
    >>> ibs, annots_df, daids, qaids, invindex = testdata_raw_internals0()
    >>> invindex_dbgstr(invindex)
    """
    print('+--- INVINDEX DBGSTR ---')
    print('called by %r' % (ut.get_caller_name(),))
    locals_ = {'invindex': invindex}
    #print(dictinfo(invindex.wx2_fxs))

    key_list = [
        'invindex.words.shape',
        'invindex.words.dtype',
        'invindex.daids.dtype',
        'invindex.idx2_dvec.shape',
        'invindex.idx2_dvec.dtype',
        'invindex.idx2_daid.shape',
        'invindex.idx2_daid.dtype',
        'invindex.idx2_dfx.shape',
        (dictinfo, 'invindex.daid2_sccw'),
        (dictinfo, 'invindex.wx2_drvecs'),
        (dictinfo, 'invindex.wx2_dmaws'),
        (dictinfo, 'invindex.wx2_dflags'),
        (dictinfo, 'invindex.wx2_idf'),
        (dictinfo, 'invindex.wx2_aids'),
        (dictinfo, 'invindex.wx2_fxs'),
        (dictinfo, 'invindex.wx2_idxs'),
    ]
    keystr_list = ut.parse_locals_keylist(locals_, key_list)
    append = keystr_list.append
    def stats_(arr):
        return wx_len_stats(arr)

    append('lenstats(invindex.wx2_idxs) = ' + stats_(invindex.wx2_idxs))
    #append('lenstats(invindex.wx2_idf) = ' + stats_(invindex.wx2_idf))
    append('lenstats(invindex.wx2_drvecs) = ' + stats_(invindex.wx2_drvecs))
    append('lenstats(invindex.wx2_aids) = ' + stats_(invindex.wx2_aids))
    def mapval(func, dict_):
        if isinstance(dict_, dict):
            return map(func, six.itervalues(dict_))
        else:
            return map(func, dict_)
    def isunique(aids):
        return len(set(aids)) == len(aids)

    if invindex.wx2_aids is not None:
        wx_series = list(invindex.wx2_aids.keys())
        aids_list = list(invindex.wx2_aids.values())
        nAids_list = map(len, aids_list)
        invindex.wx2_aids
        append('sum(mapval(len, invindex.wx2_aids))) = ' + str(sum(nAids_list)))
        probably_asmk = all(mapval(isunique, invindex.wx2_aids))
        if probably_asmk:
            append('All wx2_aids are unique. aggregate probably is True')
        else:
            append('Some wx2_aids are duplicates. aggregate probably is False')
        maxkey = wx_series[np.array(nAids_list).argmax()]
        print('wx2_aids[maxkey=%r] = \n' % (maxkey,) + str(invindex.wx2_aids[maxkey]))
    dbgstr = '\n'.join(keystr_list)
    print(dbgstr)
    print('L--- END INVINDEX DBGSTR ---')
Example #15
0
def invindex_dbgstr(invindex):
    """
    >>> from ibeis.algo.hots.smk.smk_debug import *  # NOQA
    >>> ibs, annots_df, daids, qaids, invindex = testdata_raw_internals0()
    >>> invindex_dbgstr(invindex)
    """
    print('+--- INVINDEX DBGSTR ---')
    print('called by %r' % (ut.get_caller_name(), ))
    locals_ = {'invindex': invindex}
    #print(dictinfo(invindex.wx2_fxs))

    key_list = [
        'invindex.words.shape',
        'invindex.words.dtype',
        'invindex.daids.dtype',
        'invindex.idx2_dvec.shape',
        'invindex.idx2_dvec.dtype',
        'invindex.idx2_daid.shape',
        'invindex.idx2_daid.dtype',
        'invindex.idx2_dfx.shape',
        (dictinfo, 'invindex.daid2_sccw'),
        (dictinfo, 'invindex.wx2_drvecs'),
        (dictinfo, 'invindex.wx2_dmaws'),
        (dictinfo, 'invindex.wx2_dflags'),
        (dictinfo, 'invindex.wx2_idf'),
        (dictinfo, 'invindex.wx2_aids'),
        (dictinfo, 'invindex.wx2_fxs'),
        (dictinfo, 'invindex.wx2_idxs'),
    ]
    keystr_list = ut.parse_locals_keylist(locals_, key_list)
    append = keystr_list.append

    def stats_(arr):
        return wx_len_stats(arr)

    append('lenstats(invindex.wx2_idxs) = ' + stats_(invindex.wx2_idxs))
    #append('lenstats(invindex.wx2_idf) = ' + stats_(invindex.wx2_idf))
    append('lenstats(invindex.wx2_drvecs) = ' + stats_(invindex.wx2_drvecs))
    append('lenstats(invindex.wx2_aids) = ' + stats_(invindex.wx2_aids))

    def mapval(func, dict_):
        if isinstance(dict_, dict):
            return map(func, six.itervalues(dict_))
        else:
            return map(func, dict_)

    def isunique(aids):
        return len(set(aids)) == len(aids)

    if invindex.wx2_aids is not None:
        wx_series = list(invindex.wx2_aids.keys())
        aids_list = list(invindex.wx2_aids.values())
        nAids_list = map(len, aids_list)
        invindex.wx2_aids
        append('sum(mapval(len, invindex.wx2_aids))) = ' +
               str(sum(nAids_list)))
        probably_asmk = all(mapval(isunique, invindex.wx2_aids))
        if probably_asmk:
            append('All wx2_aids are unique. aggregate probably is True')
        else:
            append('Some wx2_aids are duplicates. aggregate probably is False')
        maxkey = wx_series[np.array(nAids_list).argmax()]
        print('wx2_aids[maxkey=%r] = \n' % (maxkey, ) +
              str(invindex.wx2_aids[maxkey]))
    dbgstr = '\n'.join(keystr_list)
    print(dbgstr)
    print('L--- END INVINDEX DBGSTR ---')