Source code for ibeis

# -*- coding: utf-8 -*-
"""
IBEIS: main package init

TODO: LAZY IMPORTS?
    http://code.activestate.com/recipes/473888-lazy-module-imports/
"""
# flake8: noqa
from __future__ import absolute_import, division, print_function, unicode_literals

try:
    import utool as ut
    import dtool
except ImportError as ex:
    print('[ibeis !!!] ERROR: Unable to load all core utility modules.')
    print('[ibeis !!!] Perhaps try super_setup.py pull')
    raise

ut.noinject(__name__, '[ibeis.__init__]')
if ut.VERBOSE:
    print('[ibeis] importing ibeis __init__')


if ut.is_developer():
    standard_visualization_functions = [
        'show_image',
        'show_chip',
        'show_chipmatch',
        'show_chipmatches',
        'show_vocabulary',
        #'show_vocabulary',
    ]

# If we dont initialize plottool before <something>
# then it causes a crash in windows. Its so freaking weird.
# something is not guitool, ibeis.viz
# has to be before control, can be after constants, params, and main_module
#import plottool

try:
    from ibeis import constants
    from ibeis import constants as const
    from ibeis import params
    from ibeis import main_module
    from ibeis import other
    from ibeis.init import sysres
    #main_module._preload()

    from ibeis import control
    from ibeis import dbio
    #from ibeis import web

    from ibeis.init import sysres
    from ibeis.main_module import (main, _preload, _init_numpy, main_loop,
                                   test_main, opendb, opendb_in_background, opendb_bg_web)
    from ibeis.control.IBEISControl import IBEISController
    from ibeis.algo.hots.query_request import QueryRequest
    from ibeis.algo.hots.chip_match import ChipMatch, AnnotMatch
    from ibeis.init.sysres import (get_workdir, set_workdir, ensure_pz_mtest,
                                   ensure_nauts, ensure_wilddogs, list_dbs)
    from ibeis.init import main_helpers

    from ibeis import algo

    from ibeis import expt
    from ibeis import species
    from ibeis import templates
    from ibeis.templates import generate_notebook
    from ibeis.control.controller_inject import register_preprocs
    from ibeis import core_annots
    from ibeis import core_images
except Exception as ex:
    ut.printex(ex, 'Error when importing ibeis', tb=True)
    raise

[docs]def import_subs(): # Weird / Fancy loading. # I want to make this simpler from ibeis import algo from ibeis import viz from ibeis import web from ibeis import gui from ibeis import templates
[docs]def run_experiment(e='print', db='PZ_MTEST', a=['unctrl'], t=['default'], initial_aids=None, qaid_override=None, daid_override=None, lazy=False, **kwargs): """ Convience function CommandLine: ibeis -e print Args: e (str): (default = 'print') db (str): (default = 'PZ_MTEST') a (list): (default = ['unctrl']) t (list): (default = ['default']) qaid_override (None): (default = None) lazy (bool): (default = False) Returns: function: func - live python function CommandLine: python -m ibeis.__init__ --exec-run_experiment --show Example: >>> # DISABLE_DOCTEST >>> from ibeis import * # NOQA >>> e = 'rank_cdf' >>> db = 'testdb1' >>> a = ['default:species=primary'] >>> t = ['default'] >>> initial_aids = [2, 3, 4, 7, 9, 10, 11] >>> qaid_override = [1, 9, 10, 11, 2, 3] >>> testres = run_experiment(e, db, a, t, qaid_override=qaid_override, >>> initial_aids=initial_aids) >>> result = ('testres = %s' % (str(testres),)) >>> print(result) >>> ut.quit_if_noshow() >>> testres.draw_func() >>> ut.show_if_requested() """ import functools def find_expt_func(e): import utool as ut import ibeis.dev for tup in ibeis.dev.REGISTERED_DOCTEST_EXPERIMENTS: modname, funcname = tup[:2] aliases = tup[2] if len(tup) == 3 else [] if e == funcname or e in aliases: module = ut.import_modname(modname) func = module.__dict__[funcname] return func # hack in --tf magic func = ut.find_testfunc('ibeis', funcname)[0] return func def build_commandline(e=e, **kwargs): # Equivalent command line version of this func import ibeis.dev valid_e_flags = ut.flatten([[tup[1]] if len(tup) == 2 else [tup[1]] + tup[2] for tup in ibeis.dev.REGISTERED_DOCTEST_EXPERIMENTS]) if e in valid_e_flags: epref = '-e' else: # hack to use tf epref = '--tf' command_parts = ['ibeis', epref, e, '--db', db, '-a', ' '.join(a).replace('(', '\(').replace(')', '\)'), '-t', ' '.join(t), ] if qaid_override is not None: command_parts.extend(['--qaid=' + ','.join(map(str, qaid_override))]) if daid_override is not None: command_parts.extend(['--daid-override=' + ','.join(map(str, daid_override))]) if 'disttype' in kwargs: command_parts.extend(['--disttype=', ','.join(map(str, kwargs['disttype']))]) # hack parse out important args that were on command line if 'f' in kwargs: command_parts.extend(['-f', ' '.join(kwargs['f'])]) if 'test_cfgx_slice' in kwargs: # very hacky, much more than checking for f slice_ = kwargs['test_cfgx_slice'] slice_attrs = [getattr(slice_, attr, '') for attr in ['start', 'stop', 'step']] slice_attrs = ut.replace_nones(slice_attrs, '') slicestr = ':'.join(map(str, slice_attrs)) command_parts.extend(['--test_cfgx_slice', slicestr]) command_parts.extend(['--show']) command_line_str = ' '.join(command_parts) # Warning, not always equivalent print('Equivalent Command Line:') print(command_line_str) return command_line_str command_line_str = build_commandline(**kwargs) def draw_cases(testres, **kwargs): e_ = 'draw_cases' func = find_expt_func(e_) ibs = testres.ibs build_commandline(e=e_, **kwargs) lazy_func = functools.partial(func, ibs, testres, show_in_notebook=True, **kwargs) return lazy_func def draw_taghist(testres, **kwargs): e_ = 'taghist' func = find_expt_func(e_) ibs = testres.ibs build_commandline(e=e_, **kwargs) lazy_func = functools.partial(func, ibs, testres, **kwargs) return lazy_func def execute_test(): func = find_expt_func(e) assert func is not None, 'unknown experiment e=%r' % (e,) argspec = ut.get_func_argspec(func) if len(argspec.args) >= 2 and argspec.args[0] == 'ibs' and argspec.args[1] == 'testres': # most experiments need a testres expts_kw = dict(defaultdb=db, a=a, t=t, qaid_override=qaid_override, daid_override=daid_override, initial_aids=initial_aids ) testdata_expts_func = functools.partial(main_helpers.testdata_expts, **expts_kw) ibs, testres = testdata_expts_func() # Build the requested drawing funciton draw_func = functools.partial(func, ibs, testres, **kwargs) testres.draw_func = draw_func ut.inject_func_as_method(testres, draw_cases) ut.inject_func_as_method(testres, draw_taghist) #testres.draw_cases = draw_cases return testres else: raise AssertionError('Unknown type of function for experiment') if lazy: return execute_test else: testres = execute_test() return testres
def testdata_expts(*args, **kwargs): ibs, testres = main_helpers.testdata_expts(*args, **kwargs) return testres #import_subs() #from ibeis import gui #from ibeis import algo #from ibeis import templates #from ibeis import viz #from ibeis import web #class _VizProxy(object): # def __init__(self): # pass # def getattr(self, key): # import ibeis.viz as viz # return getattr(viz, key) # def setattr(self, key, val): # import ibeis.viz as viz # return getattr(viz, key, val) #viz = _VizProxy #import apipkg #apipkg.initpkg(__name__, { # 'viz': { # 'clone': "ibeis.viz", # } #} #) from ibeis.init import main_helpers testdata_cm = main_helpers.testdata_cm testdata_cmlist = main_helpers.testdata_cmlist testdata_qreq_ = main_helpers.testdata_qreq_ testdata_pipecfg = main_helpers.testdata_pipecfg testdata_filtcfg = main_helpers.testdata_filtcfg testdata_expts = main_helpers.testdata_expts testdata_expanded_aids = main_helpers.testdata_expanded_aids testdata_aids = main_helpers.testdata_aids # Utool generated init makeinit.py print, rrr, profile = ut.inject2(__name__, '[ibeis]')
[docs]def reload_subs(verbose=True): """ Reloads ibeis and submodules """ import_subs() rrr(verbose=verbose) getattr(constants, 'rrr', lambda verbose: None)(verbose=verbose) getattr(main_module, 'rrr', lambda verbose: None)(verbose=verbose) getattr(params, 'rrr', lambda verbose: None)(verbose=verbose) getattr(other, 'reload_subs', lambda verbose: None)(verbose=verbose) getattr(dbio, 'reload_subs', lambda verbose: None)(verbose=verbose) getattr(algo, 'reload_subs', lambda verbose: None)(verbose=verbose) getattr(control, 'reload_subs', lambda verbose: None)(verbose=verbose) getattr(viz, 'reload_subs', lambda: None)() getattr(gui, 'reload_subs', lambda verbose: None)(verbose=verbose) getattr(algo, 'reload_subs', lambda verbose: None)(verbose=verbose) getattr(viz, 'reload_subs', lambda verbose: None)(verbose=verbose) getattr(web, 'reload_subs', lambda verbose: None)(verbose=verbose) rrr(verbose=verbose)
rrrr = reload_subs from ibeis.control.DB_SCHEMA_CURRENT import VERSION_CURRENT __version__ = VERSION_CURRENT __version__ = '1.5.2' if __version__ != VERSION_CURRENT: raise AssertionError( 'need to update version in __init__ file from %r to %r so setup.py can work nicely' % ( __version__, VERSION_CURRENT)) """ Regen Command: Kinda have to work with the output of these. This module is hard to autogenerate correctly. cd /home/joncrall/code/ibeis/ibeis/other makeinit.py -x web viz tests gui all_imports makeinit.py -x constants params main_module other control dbio tests all_imports """ if __name__ == '__main__': r""" CommandLine: python -m ibeis python -m ibeis --allexamples """ import multiprocessing multiprocessing.freeze_support() # for win32 import utool as ut # NOQA ut.doctest_funcs()