def init_parameter(self, parameter_context, bricking_scheme): """ Initializes a parameter using a ParameterContext object and a bricking scheme for that parameter @param parameter_context ParameterContext object describing the parameter to initialize @param bricking_scheme A dictionary containing the brick and chunk sizes @return A PersistedStorage object """ if self.mode == 'r': raise IOError('PersistenceLayer not open for writing: mode == \'{0}\''.format(self.mode)) parameter_name = parameter_context.name self.global_bricking_scheme = bricking_scheme pm = ParameterManager(os.path.join(self.root_dir, self.guid, parameter_name), parameter_name) self.parameter_metadata[parameter_name] = pm pm.parameter_context = parameter_context log.debug('Initialize %s', parameter_name) self.master_manager.create_group(parameter_name) log.debug('Performing Rtree dict setup') tD = parameter_context.dom.total_extents bD,cD = self.calculate_brick_size(tD, bricking_scheme) #remains same for each parameter # Verify domain is Rtree friendly tree_rank = len(bD) log.debug('tree_rank: %s', tree_rank) if tree_rank == 1: tree_rank += 1 log.debug('tree_rank: %s', tree_rank) p = rtree.index.Property() p.dimension = tree_rank brick_tree = rtree.index.Index(properties=p) pm.brick_list = {} if isinstance(parameter_context.param_type, (FunctionType, ConstantType)): # These have constant storage, never expand!! pm.brick_domains = [(1,),(1,),(1,),bricking_scheme] else: pm.brick_domains = [tD, bD, cD, bricking_scheme] pm.tree_rank = tree_rank pm.brick_tree = brick_tree v = PersistedStorage(pm, self.brick_dispatcher, dtype=parameter_context.param_type.storage_encoding, fill_value=parameter_context.param_type.fill_value, mode=self.mode, inline_data_writes=self.inline_data_writes, auto_flush=self.auto_flush_values) self.value_list[parameter_name] = v self.expand_domain(parameter_context) # CBM TODO: Consider making this optional and bulk-flushing from the coverage after all parameters have been initialized # No need to check if they're dirty, we know they are! pm.flush() self.master_manager.flush() return v
def init_parameter(self, parameter_context, bricking_scheme): parameter_name = parameter_context.name self.global_bricking_scheme = bricking_scheme pm = ParameterManager(os.path.join(self.root_dir, self.guid, parameter_name), parameter_name) self.parameter_metadata[parameter_name] = pm pm.parameter_context = parameter_context log.debug('Initialize %s', parameter_name) self.master_manager.create_group(parameter_name) log.debug('Performing Rtree dict setup') tD = parameter_context.dom.total_extents bD,cD = self.calculate_brick_size(tD, bricking_scheme) #remains same for each parameter # Verify domain is Rtree friendly tree_rank = len(bD) log.debug('tree_rank: %s', tree_rank) if tree_rank == 1: tree_rank += 1 log.debug('tree_rank: %s', tree_rank) p = rtree.index.Property() p.dimension = tree_rank brick_tree = rtree.index.Index(properties=p) pm.brick_list = {} if isinstance(parameter_context.param_type, (FunctionType, ConstantType)): # These have constant storage, never expand!! pm.brick_domains = [(1,),(1,),(1,),bricking_scheme] else: pm.brick_domains = [tD, bD, cD, bricking_scheme] pm.tree_rank = tree_rank pm.brick_tree = brick_tree v = PersistedStorage(pm, self.brick_dispatcher, dtype=parameter_context.param_type.storage_encoding, fill_value=parameter_context.param_type.fill_value, auto_flush=self.auto_flush_values) self.value_list[parameter_name] = v self.expand_domain(parameter_context) if pm.is_dirty(): pm.flush() if self.master_manager.is_dirty(): self.master_manager.flush() return v