本文整理汇总了Python中grid_control.parameters.psource_base.ParameterSource类的典型用法代码示例。如果您正苦于以下问题:Python ParameterSource类的具体用法?Python ParameterSource怎么用?Python ParameterSource使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ParameterSource类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: createLookupHelper
def createLookupHelper(pconfig, var_list, lookup_list):
# Return list of (doElevate, PSourceClass, arguments) entries
if len(var_list) != 1: # multi-lookup handling
result = []
for var_name in var_list:
result.extend(createLookupHelper(pconfig, [var_name], lookup_list))
return result
var_name = var_list[0]
pvalue = pconfig.getParameter(var_name.lstrip('!'))
if isinstance(pvalue, list): # simple parameter source
if len(pvalue) == 1:
return [(False, ParameterSource.getClass('ConstParameterSource'), [var_name, pvalue[0]])]
else:
return [(False, ParameterSource.getClass('SimpleParameterSource'), [var_name, pvalue])]
elif isinstance(pvalue, tuple) and pvalue[0] == 'format':
return [(False, ParameterSource.getClass('FormatterParameterSource'), pvalue[1:])]
lookup_key = None
if lookup_list: # default lookup key
lookup_key = KeyParameterSource(*lookup_list)
# Determine kind of lookup, [3] == lookupDictConfig, [0] == lookupContent
tmp = lookupConfigParser(pconfig, KeyParameterSource(var_name), lookup_key)
lookupContent = tmp[3][0]
lookupLen = lmap(len, lookupContent.values())
if (min(lookupLen) == 1) and (max(lookupLen) == 1): # simple lookup sufficient for this setup
return [(False, SimpleLookupParameterSource, list(tmp))]
# switch needs elevation beyond local scope
return [(True, SwitchingLookupParameterSource, list(tmp))]
示例2: _resyncInternal
def _resyncInternal(self): # This function is _VERY_ time critical!
tmp = self._rawSource.resync() # First ask about psource changes
(redoNewPNum, disableNewPNum, sizeChange) = (set(tmp[0]), set(tmp[1]), tmp[2])
hashNew = self._rawSource.getHash()
hashChange = self._storedHash != hashNew
self._storedHash = hashNew
if not (redoNewPNum or disableNewPNum or sizeChange or hashChange):
self._resyncState = None
return
psource_old = ParameterAdapter(None, ParameterSource.createInstance('GCDumpParameterSource', self._pathParams))
psource_new = ParameterAdapter(None, self._rawSource)
mapJob2PID = {}
(pAdded, pMissing, _) = self._diffParams(psource_old, psource_new, mapJob2PID, redoNewPNum, disableNewPNum)
self._source = self._getResyncSource(psource_old, psource_new, mapJob2PID, pAdded, pMissing, disableNewPNum)
self._mapJob2PID = mapJob2PID # Update Job2PID map
redoNewPNum = redoNewPNum.difference(disableNewPNum)
if redoNewPNum or disableNewPNum:
mapPID2Job = dict(ismap(utils.swap, self._mapJob2PID.items()))
translate = lambda pNum: mapPID2Job.get(pNum, pNum)
self._resyncState = (set(imap(translate, redoNewPNum)), set(imap(translate, disableNewPNum)), sizeChange)
elif sizeChange:
self._resyncState = (set(), set(), sizeChange)
# Write resynced state
self._writeJob2PID(self._pathJob2PID + '.tmp')
ParameterSource.getClass('GCDumpParameterSource').write(self._pathParams + '.tmp', self)
os.rename(self._pathJob2PID + '.tmp', self._pathJob2PID)
os.rename(self._pathParams + '.tmp', self._pathParams)
示例3: _resync_adapter
def _resync_adapter(self, pa_old, pa_new, result_redo, result_disable, size_change):
(map_jobnum2pnum, pspi_list_added, pspi_list_missing) = _diff_pspi_list(pa_old, pa_new,
result_redo, result_disable)
# Reorder and reconstruct parameter space with the following layout:
# NNNNNNNNNNNNN OOOOOOOOO | source: NEW (==self) and OLD (==from file)
# <same><added> <missing> | same: both in NEW and OLD, added: only in NEW, missing: only in OLD
if pspi_list_added:
_extend_map_jobnum2pnum(map_jobnum2pnum, pa_old.get_job_len(), pspi_list_added)
if pspi_list_missing:
# extend the parameter source by placeholders for the missing parameter space points
psrc_missing = _create_placeholder_psrc(pa_old, pa_new,
map_jobnum2pnum, pspi_list_missing, result_disable)
self._psrc = ParameterSource.create_instance('ChainParameterSource',
self._psrc_raw, psrc_missing)
self._map_jobnum2pnum = map_jobnum2pnum # Update Job2PID map
# Write resynced state
self._write_jobnum2pnum(self._path_jobnum2pnum + '.tmp')
ParameterSource.get_class('GCDumpParameterSource').write(self._path_params + '.tmp',
self.get_job_len(), self.get_job_metadata(), self.iter_jobs())
os.rename(self._path_jobnum2pnum + '.tmp', self._path_jobnum2pnum)
os.rename(self._path_params + '.tmp', self._path_params)
result_redo = result_redo.difference(result_disable)
if result_redo or result_disable:
map_pnum2jobnum = reverse_dict(self._map_jobnum2pnum)
def _translate_pnum(pnum):
return map_pnum2jobnum.get(pnum, pnum)
result_redo = set(imap(_translate_pnum, result_redo))
result_disable = set(imap(_translate_pnum, result_disable))
return (result_redo, result_disable, size_change)
return (set(), set(), size_change)
示例4: getSource
def getSource(self):
source_list = self._constSources + [self._pfactory.getSource()] + self._lookupSources
source = ParameterSource.createInstance('ZipLongParameterSource', *source_list)
for (PSourceClass, args) in self._nestedSources:
source = PSourceClass(source, *args)
if self._req:
req_source = ParameterSource.createInstance('RequirementParameterSource')
source = ParameterSource.createInstance('ZipLongParameterSource', source, req_source)
source = self._useAvailableDataSource(source)
return ParameterSource.createInstance('RepeatParameterSource', source, self._repeat)
示例5: __new__
def __new__(cls, pconfig, repository, output_vn, lookup_vn_list=None):
parameter_value = pconfig.get_parameter(output_vn.lstrip('!'))
if isinstance(parameter_value, list):
if len(parameter_value) != 1: # Simplify single value parameters to const parameters
return ParameterSource.create_instance('SimpleParameterSource', output_vn, parameter_value)
return ParameterSource.create_instance('ConstParameterSource', output_vn, parameter_value[0])
elif isinstance(parameter_value, tuple) and isinstance(parameter_value[0], str):
return ParameterSource.create_instance(*parameter_value)
return ParameterSource.create_instance('InternalAutoLookupParameterSource',
pconfig, output_vn, lookup_vn_list)
示例6: _combineSources
def _combineSources(self, clsName, args):
repeat = reduce(lambda a, b: a * b, ifilter(lambda expr: isinstance(expr, int), args), 1)
args = lfilter(lambda expr: not isinstance(expr, int), args)
if args:
result = ParameterSource.createInstance(clsName, *args)
if repeat > 1:
return ParameterSource.createInstance('RepeatParameterSource', result, repeat)
return result
elif repeat > 1:
return repeat
return NullParameterSource()
示例7: __init__
def __init__(self, config, source):
self._psrc_raw = source
BasicParameterAdapter.__init__(self, config, source)
self._map_jobnum2pnum = {}
ensure_dir_exists(config.get_work_path(), 'parameter storage directory', ParameterError)
self._path_jobnum2pnum = config.get_work_path('params.map.gz')
self._path_params = config.get_work_path('params.dat.gz')
# Find out if init should be performed - overrides resync_requested!
init_requested = config.get_state('init', detail='parameters')
init_needed = False
if not (os.path.exists(self._path_params) and os.path.exists(self._path_jobnum2pnum)):
init_needed = True # Init needed if no parameter log exists
if init_requested and not init_needed and (source.get_parameter_len() is not None):
self._log.warning('Re-Initialization will overwrite the current mapping ' +
'between jobs and parameter/dataset content! This can lead to invalid results!')
user_msg = ('Do you want to perform a syncronization between ' +
'the current mapping and the new one to avoid this?')
if UserInputInterface().prompt_bool(user_msg, True):
init_requested = False
do_init = init_requested or init_needed
# Find out if resync should be performed
resync_by_user = config.get_state('resync', detail='parameters')
config.set_state(False, 'resync', detail='parameters')
psrc_hash = self._psrc_raw.get_psrc_hash()
self._psrc_hash_stored = config.get('parameter hash', psrc_hash, persistent=True)
psrc_hash_changed = self._psrc_hash_stored != psrc_hash # Resync if parameters have changed
resync_by_psrc = self._psrc_raw.get_resync_request()
if do_init: # Write current state
self._write_jobnum2pnum(self._path_jobnum2pnum)
ParameterSource.get_class('GCDumpParameterSource').write(self._path_params,
self.get_job_len(), self.get_job_metadata(), self.iter_jobs())
elif resync_by_user or resync_by_psrc or psrc_hash_changed: # Perform sync
if psrc_hash_changed:
self._log.info('Parameter hash has changed')
self._log.debug('\told hash: %s', self._psrc_hash_stored)
self._log.debug('\tnew hash: %s', psrc_hash)
self._log.log(logging.DEBUG1, '\tnew src: %s', self._psrc_raw)
config.set_state(True, 'init', detail='config')
elif resync_by_psrc:
self._log.info('Parameter source requested resync')
self._log.debug('\t%r', str.join(', ', imap(repr, resync_by_psrc)))
elif resync_by_user:
self._log.info('User requested resync')
self._psrc_hash_stored = None
self._resync_state = self.resync(force=True)
else: # Reuse old mapping
activity = Activity('Loading cached parameter information')
self._read_jobnum2pnum()
activity.finish()
return # do not set parameter hash in config
config.set('parameter hash', self._psrc_raw.get_psrc_hash())
示例8: _createRef
def _createRef(self, arg):
refTypeDefault = 'dataset'
DataParameterSource = ParameterSource.getClass('DataParameterSource')
if arg not in DataParameterSource.datasetsAvailable:
refTypeDefault = 'csv'
refType = self._paramConfig.get(arg, 'type', refTypeDefault)
if refType == 'dataset':
return DataParameterSource.create(self._paramConfig, arg)
elif refType == 'csv':
return ParameterSource.getClass('CSVParameterSource').create(self._paramConfig, arg)
raise APIError('Unknown reference type: "%s"' % refType)
示例9: __init__
def __init__(self, fn):
ParameterSource.__init__(self)
fp = gzip.open(fn, 'rb')
keyline = fp.readline().lstrip('#').strip()
self.keys = []
if keyline:
self.keys = eval(keyline)
def parseLine(line):
if not line.startswith('#'):
pNumStr, stored = map(str.strip, line.split('\t', 1))
return ('!' in pNumStr, int(pNumStr.rstrip('!')), map(eval, stored.split('\t')))
self.values = map(parseLine, fp.readlines())
示例10: _resync
def _resync(self): # This function is _VERY_ time critical!
tmp = self._psrc_raw.resync_psrc() # First ask about psrc changes
(result_redo, result_disable, size_change) = (set(tmp[0]), set(tmp[1]), tmp[2])
psrc_hash_new = self._psrc_raw.get_psrc_hash()
psrc_hash_changed = self._psrc_hash_stored != psrc_hash_new
self._psrc_hash_stored = psrc_hash_new
if not (result_redo or result_disable or size_change or psrc_hash_changed):
return ParameterSource.get_empty_resync_result()
ps_old = ParameterSource.create_instance('GCDumpParameterSource', self._path_params)
pa_old = ParameterAdapter(None, ps_old)
pa_new = ParameterAdapter(None, self._psrc_raw)
return self._resync_adapter(pa_old, pa_new, result_redo, result_disable, size_change)
示例11: _addConstantPSource
def _addConstantPSource(self, config, cName, varName):
lookupVar = config.get('%s lookup' % cName, '', onChange = None)
if lookupVar:
matcher = Matcher.createInstance(config.get('%s matcher' % cName, 'start', onChange = None), config, cName)
content = config.getDict(cName, {}, onChange = None)
content_fixed = {}
content_order = lmap(lambda x: (x,), content[1])
for key in content[0]:
content_fixed[(key,)] = (content[0][key],)
ps = ParameterSource.createInstance('SimpleLookupParameterSource', varName, [lookupVar], [matcher], (content_fixed, content_order))
self.lookupSources.append(ps)
else:
ps = ParameterSource.createInstance('ConstParameterSource', varName, config.get(cName).strip())
self.constSources.append(ps)
示例12: __init__
def __init__(self, dataDir, srcName, dataProvider, dataSplitter, dataProc, keepOld = True):
ParameterSource.__init__(self)
(self._dataDir, self._srcName, self._dataProvider, self._dataSplitter, self._part_proc) = \
(dataDir, srcName, dataProvider, dataSplitter, dataProc)
if not dataProvider:
pass # debug mode - used by scripts - disables resync
elif os.path.exists(self.getDataPath('cache.dat') and self.getDataPath('map.tar')):
self._dataSplitter.importPartitions(self.getDataPath('map.tar'))
else:
DataProvider.saveToFile(self.getDataPath('cache.dat'), self._dataProvider.getBlocks(silent = False))
self._dataSplitter.splitDataset(self.getDataPath('map.tar'), self._dataProvider.getBlocks())
self._maxN = self._dataSplitter.getMaxJobs()
self._keepOld = keepOld
示例13: __init__
def __init__(self, fn):
ParameterSource.__init__(self)
fp = ZipFile(fn, 'r')
try:
keyline = fp.readline().lstrip('#').strip()
self._keys = []
if keyline:
self._keys = parseJSON(keyline)
def parseLine(line):
if not line.startswith('#'):
pNumStr, stored = lmap(str.strip, line.split('\t', 1))
return ('!' in pNumStr, int(pNumStr.rstrip('!')), lmap(parseJSON, stored.split('\t')))
self._values = lmap(parseLine, fp.readlines())
finally:
fp.close()
示例14: __init__
def __init__(self, dataDir, srcName, dataProvider, dataSplitter, dataProc):
ParameterSource.__init__(self)
(self.dataDir, self.srcName, self.dataProvider, self.dataSplitter, self.dataProc) = \
(dataDir, srcName, dataProvider, dataSplitter, dataProc)
if not dataProvider:
pass # debug mode - used by scripts - disables resync
elif os.path.exists(self.getDataPath('cache.dat') and self.getDataPath('map.tar')):
self.dataSplitter.importState(self.getDataPath('map.tar'))
else:
self.dataProvider.saveState(self.getDataPath('cache.dat'))
self.dataSplitter.splitDataset(self.getDataPath('map.tar'), self.dataProvider.getBlocks())
self.maxN = self.dataSplitter.getMaxJobs()
self.keepOld = True
示例15: __init__
def __init__(self, config, source):
self._rawSource = source
BasicParameterAdapter.__init__(self, config, source)
self._mapJob2PID = {}
if not os.path.isdir(config.getWorkPath()):
os.makedirs(config.getWorkPath())
self._pathJob2PID = config.getWorkPath('params.map.gz')
self._pathParams = config.getWorkPath('params.dat.gz')
# Find out if init should be performed - overrides userResync!
userInit = config.getState('init', detail = 'parameters')
needInit = False
if not (os.path.exists(self._pathParams) and os.path.exists(self._pathJob2PID)):
needInit = True # Init needed if no parameter log exists
if userInit and not needInit and (source.getMaxParameters() is not None):
utils.eprint('Re-Initialization will overwrite the current mapping between jobs and parameter/dataset content! This can lead to invalid results!')
if utils.getUserBool('Do you want to perform a syncronization between the current mapping and the new one to avoid this?', True):
userInit = False
doInit = userInit or needInit
# Find out if resync should be performed
userResync = config.getState('resync', detail = 'parameters')
config.setState(False, 'resync', detail = 'parameters')
needResync = False
pHash = self._rawSource.getHash()
self._storedHash = config.get('parameter hash', pHash, persistent = True)
if self._storedHash != pHash:
needResync = True # Resync needed if parameters have changed
self._log.info('Parameter hash has changed')
self._log.debug('\told hash: %s', self._storedHash)
self._log.debug('\tnew hash: %s', pHash)
config.setState(True, 'init', detail = 'config')
doResync = (userResync or needResync) and not doInit
if not doResync and not doInit: # Reuse old mapping
activity = utils.ActivityLog('Loading cached parameter information')
self._readJob2PID()
activity.finish()
return
elif doResync: # Perform sync
activity = utils.ActivityLog('Syncronizing parameter information')
self._storedHash = None
self._resyncState = self.resync()
activity.finish()
elif doInit: # Write current state
self._writeJob2PID(self._pathJob2PID)
ParameterSource.getClass('GCDumpParameterSource').write(self._pathParams, self)
config.set('parameter hash', self._rawSource.getHash())