From a2fdf2ded373a9d34605f9649844cf46f2c8e92c Mon Sep 17 00:00:00 2001 From: Ger van Diepen <diepen@astron.nl> Date: Tue, 10 May 2011 11:48:42 +0000 Subject: [PATCH] bug 1687: Fixed makeSubset --- LCS/pyparameterset/src/__init__.py | 17 +++++++++++++---- LCS/pyparameterset/src/pyparameterset.cc | 7 ++++--- LCS/pyparameterset/test/tpyparameterset.py | 9 +++++++++ LCS/pyparameterset/test/tpyparameterset.stdout | 6 ++++++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/LCS/pyparameterset/src/__init__.py b/LCS/pyparameterset/src/__init__.py index 51bac88f1db..7c711b50002 100755 --- a/LCS/pyparameterset/src/__init__.py +++ b/LCS/pyparameterset/src/__init__.py @@ -51,7 +51,7 @@ class parameterset(PyParameterSet): The Python interface to ParameterSet """ - def __init__(self, filename=None, caseInsensitive=False): + def __init__(self, filename=None, caseInsensitive=False, _copyObj=False): """Create a parameterset object. filename @@ -61,10 +61,14 @@ class parameterset(PyParameterSet): True = parameter names are case insensitive """ - if filename==None: - PyParameterSet.__init__ (self, caseInsensitive); + if _copyObj == True: + # Copy constructor + PyParameterSet.__init__ (self, filename) + elif filename==None: + PyParameterSet.__init__ (self, caseInsensitive, 0, 0); elif isinstance(filename, bool): - PyParameterSet.__init__ (self, filename); + # Here filename argument means caseInsensitive + PyParameterSet.__init__ (self, filename, 0, 0); else: PyParameterSet.__init__ (self, filename, caseInsensitive); @@ -76,6 +80,11 @@ class parameterset(PyParameterSet): """Get the parametervalue object of a parameter.""" return self._get (key) + def makeSubset (self, prefix): + """Get a subset of all keys starting with the given prefix""" + ps = self._makeSubset (prefix) + return parameterset (ps, _copyObj=True) + def keys(self): """Get a sorted list of all parameter names.""" return self.keywords() diff --git a/LCS/pyparameterset/src/pyparameterset.cc b/LCS/pyparameterset/src/pyparameterset.cc index 998dc9d8476..bd583c9a373 100644 --- a/LCS/pyparameterset/src/pyparameterset.cc +++ b/LCS/pyparameterset/src/pyparameterset.cc @@ -39,7 +39,7 @@ namespace LOFAR { PyParameterSet() : ParameterSet() {} - PyParameterSet (bool caseInsensitive) + PyParameterSet (bool caseInsensitive, int, int) : ParameterSet (caseInsensitive) {} PyParameterSet (const string& fileName, bool caseInsensitive) @@ -164,7 +164,8 @@ namespace LOFAR { void pyparameterset() { class_<PyParameterSet> ("PyParameterSet") - .def (init<bool>()) + .def (init<PyParameterSet>()) + .def (init<bool, int, int>()) .def (init<std::string, bool>()) .def ("version", &PyParameterSet::version, (boost::python::arg("type")="other"), @@ -174,7 +175,7 @@ namespace LOFAR { .def ("__len__", &ParameterSet::size, "Get the number of parameters.") .def ("keywords", &PyParameterSet::keywords) - .def ("makeSubset", &PyParameterSet::makeSubset, + .def ("_makeSubset", &PyParameterSet::makeSubset, (boost::python::arg("baseKey"), boost::python::arg("prefix")=""), "Return a subset as a new parameterset object.\n" diff --git a/LCS/pyparameterset/test/tpyparameterset.py b/LCS/pyparameterset/test/tpyparameterset.py index 0ed5eace3a2..85ad29925b9 100644 --- a/LCS/pyparameterset/test/tpyparameterset.py +++ b/LCS/pyparameterset/test/tpyparameterset.py @@ -79,3 +79,12 @@ ps.add ("vecexp", "[1..3,5..10]") ps.add ("vecnest", "[[1..3,5*10],[5..10]]") print ps.keys() checkps (ps) + +# Check if a subset can be made and its name can be read. +pss = ps.makeSubset('a.') +print pss.keys() +print 'b.c =', pss.getString ('b.c') +print pss.makeSubset('b.').keys() +print pss.makeSubset('b.').size() +print pss.makeSubset('cc').keys() # should be empty +print len(pss.makeSubset('cc')) diff --git a/LCS/pyparameterset/test/tpyparameterset.stdout b/LCS/pyparameterset/test/tpyparameterset.stdout index 9cab053c842..9f0374a9260 100644 --- a/LCS/pyparameterset/test/tpyparameterset.stdout +++ b/LCS/pyparameterset/test/tpyparameterset.stdout @@ -78,3 +78,9 @@ True [1..3,5*10] [1, 2, 3, 10, 10, 10, 10, 10] [5, 6, 7, 8, 9, 10] +['b', 'b.bool', 'b.c', 'b.double', 'b.lange_naam'] +b.c = 5 +['bool', 'c', 'double', 'lange_naam'] +4 +[] +0 -- GitLab