示例#1
0
    def __set_loaders_and_savers(self):
        """ Get lists of loader and saver positions within the plugin list and
        set the number of loaders.

        :returns: loader index list and saver index list
        :rtype: list(int(loader)), list(int(saver))
        """
        from savu.plugins.loaders.base_loader import BaseLoader
        from savu.plugins.savers.base_saver import BaseSaver
        loader_idx = []
        saver_idx = []
        self.n_plugins = len(self.plugin_list)

        for i in range(self.n_plugins):
            bases = inspect.getmro(pu.load_class(self.plugin_list[i]['id']))
            loader_list = [b for b in bases if b == BaseLoader]
            saver_list = [b for b in bases if b == BaseSaver]
            if loader_list:
                loader_idx.append(i)
            if saver_list:
                saver_idx.append(i)
        self.loader_idx = loader_idx
        self.saver_idx = saver_idx
        self.n_loaders = len(loader_idx)
        self.n_savers = len(saver_idx)
示例#2
0
    def _set_parameters(self, args, kwargs, cls, cls_path, extras):
        mod = '.'.join(cls_path.split('.')[:-1])
        cls = cls_path.split('.')[-1]
        func = pu.load_class(mod, cls).__init__

        argspec = inspect.getargspec(func)
        if len(argspec[0]) - 1 != len(args) + len(kwargs.keys()):
            raise Exception('Incorrect number of input arguments mapped.')

        data_lists = [
            True if isinstance(a, list) and isinstance(a[0], int) else False
            for a in args
        ]

        # If there are multiple data objects this is incompatible with
        # checkpointing.
        ddict = {}
        if args.count('self') > 2 or data_lists.count(True):
            ddict = None
        else:
            ddict['args'] = args
            ddict['kwargs'] = kwargs
            ddict['cls'] = cls_path
            ddict['extras'] = extras
        return ddict
示例#3
0
    def _set_data_type(self, dObj, group, nxs_filename):
        link = group.get(group.attrs['signal'], getlink=True)
        if isinstance(link, h5py._hl.group.HardLink) and \
                self.exp.meta_data.get('test_state') is True:
            link.filename = nxs_filename
            link.path = group.name + '/data'

        fname = os.path.join(os.path.dirname(nxs_filename), link.filename)

        dObj.backing_file = h5py.File(fname, 'r')
        dObj.data = dObj.backing_file[link.path]

        if 'data_type' not in group:
            return

        entry = group['data_type']
        args = self._get_data(entry, 'args')
        args = [args[''.join(['args', str(i)])] for i in range(len(args))]
        args = [a if a != 'self' else dObj for a in args]
        kwargs = self._get_data(entry, 'kwargs')
        extras = self._get_data(entry, 'extras')

        cls = str(self._get_data(entry, 'cls'))
        cls_split = cls.split('.')
        cls_inst = \
            pu.load_class('.'.join(cls_split[:-1]), cls_name=cls_split[-1])
        dObj.data = cls_inst(*args, **kwargs)
        dObj.data._base_post_clone_updates(dObj.data, extras)
    def _set_data_type(self, dObj, group, nxs_filename):
        link = group.get(group.attrs['signal'], getlink=True)
        if isinstance(link, h5py._hl.group.HardLink) and \
                self.exp.meta_data.get('test_state') is True:
            link.filename = nxs_filename
            link.path = group.name + '/data'

        fname = os.path.join(os.path.dirname(nxs_filename), link.filename)

        dObj.backing_file = h5py.File(fname, 'r')
        dObj.data = dObj.backing_file[link.path]

        if 'data_type' not in group:
            return

        entry = group['data_type']
        args = self._get_data(entry, 'args')
        args = [args[''.join(['args', str(i)])] for i in range(len(args))]
        args = [a if a != 'self' else dObj for a in args]
        kwargs = self._get_data(entry, 'kwargs')
        extras = self._get_data(entry, 'extras')

        cls = str(self._get_data(entry, 'cls'))
        cls_split = cls.split('.')
        cls_inst = \
            pu.load_class('.'.join(cls_split[:-1]), cls_name=cls_split[-1])
        dObj.data = cls_inst(*args, **kwargs)
        dObj.data._base_post_clone_updates(dObj.data, extras)
示例#5
0
    def __set_loaders_and_savers(self):
        """ Get lists of loader and saver positions within the plugin list and
        set the number of loaders.

        :returns: loader index list and saver index list
        :rtype: list(int(loader)), list(int(saver))
        """
        from savu.plugins.loaders.base_loader import BaseLoader
        from savu.plugins.savers.base_saver import BaseSaver
        loader_idx = []
        saver_idx = []
        self.n_plugins = len(self.plugin_list)

        for i in range(self.n_plugins):
            pid = self.plugin_list[i]['id']
            bases = inspect.getmro(pu.load_class(pid))
            loader_list = [b for b in bases if b == BaseLoader]
            saver_list = [b for b in bases if b == BaseSaver]
            if loader_list:
                loader_idx.append(i)
            if saver_list:
                saver_idx.append(i)
        self.loader_idx = loader_idx
        self.saver_idx = saver_idx
        self.n_loaders = len(loader_idx)
        self.n_savers = len(saver_idx)
示例#6
0
 def test_get_plugins_path_and_load(self):
     savu_path = os.path.split(savu.__path__[0])[0]
     plugin_path = os.path.join(savu_path, "plugin_examples")
     os.environ["SAVU_PLUGINS_PATH"] = plugin_path
     pu.get_plugins_paths()
     plugin = pu.load_class("example_median_filter")()
     self.assertEqual(plugin.name, "ExampleMedianFilter")
     os.environ["SAVU_PLUGINS_PATH"] = ""
示例#7
0
 def _contains_gpu_processes(self):
     """ Returns True if gpu processes exist in the process list. """
     from savu.plugins.driver.gpu_plugin import GpuPlugin
     for i in range(self.n_plugins):
         bases = inspect.getmro(pu.load_class(self.plugin_list[i]['id']))
         if GpuPlugin in bases:
             return True
     return False
示例#8
0
 def _contains_gpu_processes(self):
     """ Returns True if gpu processes exist in the process list. """
     from savu.plugins.driver.gpu_plugin import GpuPlugin
     for i in range(self.n_plugins):
         bases = inspect.getmro(pu.load_class(self.plugin_list[i]['id']))
         if GpuPlugin in bases:
             return True
     return False
示例#9
0
    def create_next_instance(self, newObj):
        dtype_dict = self.get_map_args()
        if dtype_dict is None:
            return None
        args, kwargs, cls, extras = self._get_parameters(dtype_dict)
        args = [newObj if isinstance(a, str) and a == 'self'
                else a for a in args]

        cls_split = cls.split('.')
        mod = '.'.join(cls_split[:-1])
        name = cls_split[-1]
        cls_inst = pu.load_class(mod, cls_name=name)
        newObj.data = cls_inst(*args, **kwargs)
        self._base_post_clone_updates(newObj.data, extras)
示例#10
0
    def create_next_instance(self, newObj):
        dtype_dict = self.get_map_args()
        if dtype_dict is None:
            return None
        args, kwargs, cls, extras = self._get_parameters(dtype_dict)
        args = [newObj if isinstance(a, str) and a == 'self'
                else a for a in args]

        cls_split = cls.split('.')
        mod = '.'.join(cls_split[:-1])
        name = cls_split[-1]
        cls_inst = pu.load_class(mod, cls_name=name)
        newObj.data = cls_inst(*args, **kwargs)
        self._base_post_clone_updates(newObj.data, extras)
示例#11
0
    def _contains_gpu_processes(self):
        """ Returns True if gpu processes exist in the process list. """
        try:
            from savu.plugins.driver.gpu_plugin import GpuPlugin
            for i in range(self.n_plugins):
                bases = inspect.getmro(pu.load_class(self.plugin_list[i]['id']))
                if GpuPlugin in bases:
                    return True
        except ImportError as ex:
            if "pynvml" in ex.message:
                logging.error('Error while importing GPU dependencies: %s',
                              ex.message)
            else:
                raise

        return False
示例#12
0
    def _contains_gpu_processes(self):
        """ Returns True if gpu processes exist in the process list. """
        try:
            from savu.plugins.driver.gpu_plugin import GpuPlugin
            for i in range(self.n_plugins):
                bases = inspect.getmro(pu.load_class(self.plugin_list[i]['id']))
                if GpuPlugin in bases:
                    return True
        except ImportError as ex:
            if "pynvml" in ex.message:
                logging.error('Error while importing GPU dependencies: %s',
                              ex.message)
            else:
                raise

        return False
示例#13
0
def set_plugin_list(options, pnames, *args):
    args = args[0] if args else None
    plugin_names = pnames if isinstance(pnames, list) else [pnames]
    options['plugin_list'] = []
    ID = [options['loader']]
    data = [{}, {}] if not args else [args[0], args[-1]]
    for i in range(len(plugin_names)):
        ID.insert(i + 1, plugin_names[i])
        plugin = pu.load_class(plugin_names[i])()
        data_dict = set_data_dict(['tomo'], get_output_datasets(plugin))
        data_dict = args[i + 1] if args else data_dict
        data.insert(i + 1, data_dict)

    for i in range(len(ID)):
        name = \
            ''.join(x.capitalize() for x in (ID[i].split('.')[-1]).split('_'))
        options['plugin_list'].append(set_plugin_entry(name, ID[i], data[i],
                                                       i))
示例#14
0
    def _add_missing_savers(self, exp):
        """ Add savers for missing datasets. """
        data_names = exp.index['in_data'].keys()
        saved_data = []

        for i in self._get_savers_index():
            saved_data.append(self.plugin_list[i]['data']['in_datasets'])
        saved_data = set([s for sub_list in saved_data for s in sub_list])

        for name in [data for data in data_names if data not in saved_data]:
            pos = exp.meta_data.get('nPlugin') + 1
            exp.meta_data.set('nPlugin', pos)
            process = {}
            plugin = pu.load_class('savu.plugins.savers.hdf5_saver')()
            plugin.parameters['in_datasets'] = [name]
            process['name'] = plugin.name
            process['id'] = plugin.__module__
            process['pos'] = str(pos + 1)
            process['data'] = plugin.parameters
            process['active'] = True
            process['desc'] = plugin.parameters_desc
            self._add(pos + 1, process)
示例#15
0
    def _set_parameters(self, args, kwargs, cls, cls_path, extras):
        mod = '.'.join(cls_path.split('.')[:-1])
        cls = cls_path.split('.')[-1]
        func = pu.load_class(mod, cls).__init__

        argspec = inspect.getargspec(func)
        if len(argspec[0])-1 != len(args) + len(kwargs.keys()):
            raise Exception('Incorrect number of input arguments mapped.')

        data_lists = [True if isinstance(a, list) and isinstance(a[0], int)
                      else False for a in args]

        # If there are multiple data objects this is incompatible with
        # checkpointing.
        ddict = {}
        if args.count('self') > 2 or data_lists.count(True):
            ddict = None
        else:
            ddict['args'] = args
            ddict['kwargs'] = kwargs
            ddict['cls'] = cls_path
            ddict['extras'] = extras
        return ddict
示例#16
0
 def testGetPlugin(self):
     mod = "savu.plugins.plugin"
     plugin = pu.load_class(mod)()
     self.assertEqual(plugin.__class__, test_plugin.Plugin,
                      "Failed to load the correct class")
     self.assertRaises(NotImplementedError, plugin.process_frames, None)
示例#17
0
 def test_get_plugin_external_path(self):
     savu_path = os.path.split(savu.__path__[0])[0]
     mod = os.path.join(savu_path, "plugin_examples",
                        "example_median_filter.py")
     plugin = pu.load_class(mod)()
     self.assertEqual(plugin.name, "ExampleMedianFilter")
示例#18
0
 def testfind_args(self):
     mod = "savu.plugins.filters.denoising.denoise_bregman_filter"
     plugin = pu.load_class(mod)()
     params = doc.find_args(plugin)
     self.assertEqual(len(params['param']), 4)
示例#19
0
 def plugin_setup(self):
     ppath = 'savu.plugins.reconstructions.astra_recons.astra_recon_cpu'
     plugin = pu.load_class(ppath)()
     return plugin
示例#20
0
 def test_load_plugin(self):
     cu.populate_plugins()
     plugin_path = pu.dawn_plugins[dawn_plugins.keys()[0]]['path2plugin']
     inst = pu.load_class(plugin_path)()
     sl = inst.__dict__['slice_list']
     exp = inst.__dict__['exp']