From a522c32ff326ee23905b176c0d621e3b311a7fc5 Mon Sep 17 00:00:00 2001 From: Chris B Date: Mon, 25 Jun 2018 15:41:23 +0100 Subject: [PATCH 1/4] Restore Parameterized._set_name(). --- param/parameterized.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/param/parameterized.py b/param/parameterized.py index 13295b764..2a149b49a 100644 --- a/param/parameterized.py +++ b/param/parameterized.py @@ -1768,6 +1768,10 @@ def get_value_generator(cls_or_slf,name): # pylint: disable-msg=E0213 def inspect_value(cls_or_slf,name): # pylint: disable-msg=E0213 return cls_or_slf.param.inspect_value(name) + @Parameters.deprecate + def _set_name(self,name): + return self_or_cls.param._set_name(name) + @Parameters.deprecate def __db_print(self,level,msg,*args,**kw): return self.param.__db_print(level,msg,*args,**kw) From 8bff9287a977ac7e5226cfa663367e78fe831606 Mon Sep 17 00:00:00 2001 From: Chris B Date: Mon, 25 Jun 2018 15:53:43 +0100 Subject: [PATCH 2/4] Don't deprecate state_push/pop i.e. leave on Parameterized. --- param/parameterized.py | 99 +++++++++++++-------------- tests/API1/testparameterizedobject.py | 4 +- 2 files changed, 48 insertions(+), 55 deletions(-) diff --git a/param/parameterized.py b/param/parameterized.py index 2a149b49a..22bdb3ba2 100644 --- a/param/parameterized.py +++ b/param/parameterized.py @@ -1060,52 +1060,7 @@ def debug(self_,msg,*args,**kw): # cebalert: it's really time to stop and clean up this bothmethod # stuff and repeated code in methods using it. - # CEBALERT: note there's no state_push method on the class, so - # dynamic parameters set on a class can't have state saved. This - # is because, to do this, state_push() would need to be a - # @bothmethod, but that complicates inheritance in cases where we - # already have a state_push() method. I need to decide what to do - # about that. (isinstance(g,Parameterized) below is used to exclude classes.) - - def state_push(self_): - """ - Save this instance's state. - - For Parameterized instances, this includes the state of - dynamically generated values. - - Subclasses that maintain short-term state should additionally - save and restore that state using state_push() and - state_pop(). - - Generally, this method is used by operations that need to test - something without permanently altering the objects' state. - """ - self = self_.self - for pname,p in self.param.params().items(): - g = self.param.get_value_generator(pname) - if hasattr(g,'_Dynamic_last'): - g._saved_Dynamic_last.append(g._Dynamic_last) - g._saved_Dynamic_time.append(g._Dynamic_time) - # CB: not storing the time_fn: assuming that doesn't - # change. - elif hasattr(g,'state_push') and isinstance(g,Parameterized): - g.param.state_push() - def state_pop(self_): - """ - Restore the most recently saved state. - - See state_push() for more details. - """ - self = self_.self - for pname,p in self.param.params().items(): - g = self.param.get_value_generator(pname) - if hasattr(g,'_Dynamic_last'): - g._Dynamic_last = g._saved_Dynamic_last.pop() - g._Dynamic_time = g._saved_Dynamic_time.pop() - elif hasattr(g,'state_pop') and isinstance(g,Parameterized): - g.param.state_pop() class ParameterizedMetaclass(type): """ @@ -1716,6 +1671,52 @@ def pprint(self, imports=None, prefix=" ", unknown_value='', return qualifier + '%s(%s)' % (self.__class__.__name__, (','+separator+prefix).join(arguments)) + # CEBALERT: note there's no state_push method on the class, so + # dynamic parameters set on a class can't have state saved. This + # is because, to do this, state_push() would need to be a + # @bothmethod, but that complicates inheritance in cases where we + # already have a state_push() method. I need to decide what to do + # about that. (isinstance(g,Parameterized) below is used to exclude classes.) + + def state_push(self): + """ + Save this instance's state. + + For Parameterized instances, this includes the state of + dynamically generated values. + + Subclasses that maintain short-term state should additionally + save and restore that state using state_push() and + state_pop(). + + Generally, this method is used by operations that need to test + something without permanently altering the objects' state. + """ + for pname,p in self.param.params().items(): + g = self.param.get_value_generator(pname) + if hasattr(g,'_Dynamic_last'): + g._saved_Dynamic_last.append(g._Dynamic_last) + g._saved_Dynamic_time.append(g._Dynamic_time) + # CB: not storing the time_fn: assuming that doesn't + # change. + elif hasattr(g,'state_push') and isinstance(g,Parameterized): + g.state_push() + + def state_pop(self): + """ + Restore the most recently saved state. + + See state_push() for more details. + """ + for pname,p in self.param.params().items(): + g = self.param.get_value_generator(pname) + if hasattr(g,'_Dynamic_last'): + g._Dynamic_last = g._saved_Dynamic_last.pop() + g._Dynamic_time = g._saved_Dynamic_time.pop() + elif hasattr(g,'state_pop') and isinstance(g,Parameterized): + g.state_pop() + + # API to be accessed via param namespace @classmethod @@ -1792,14 +1793,6 @@ def verbose(self,msg,*args,**kw): def debug(self,msg,*args,**kw): return self.param.debug(msg,*args,**kw) - @Parameters.deprecate - def state_push(self): - return self.param.state_push() - - @Parameters.deprecate - def state_pop(self): - return self.param.state_pop() - @Parameters.deprecate def print_param_values(self): return self.param.print_param_values() diff --git a/tests/API1/testparameterizedobject.py b/tests/API1/testparameterizedobject.py index c98e3d3ee..72f2cc948 100644 --- a/tests/API1/testparameterizedobject.py +++ b/tests/API1/testparameterizedobject.py @@ -146,10 +146,10 @@ def test_state_saving(self): g._Dynamic_time_fn=None assert t.dyn!=t.dyn orig = t.dyn - t.param.state_push() + t.state_push() t.dyn assert t.param.inspect_value('dyn')!=orig - t.param.state_pop() + t.state_pop() assert t.param.inspect_value('dyn')==orig From 9846b76aaf6f51f540a8aaee7f7ab6694b1689d5 Mon Sep 17 00:00:00 2001 From: Chris B Date: Mon, 25 Jun 2018 15:57:17 +0100 Subject: [PATCH 3/4] Fixed self/cls typo. --- param/parameterized.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/param/parameterized.py b/param/parameterized.py index 22bdb3ba2..669322596 100644 --- a/param/parameterized.py +++ b/param/parameterized.py @@ -1771,7 +1771,7 @@ def inspect_value(cls_or_slf,name): # pylint: disable-msg=E0213 @Parameters.deprecate def _set_name(self,name): - return self_or_cls.param._set_name(name) + return self.param._set_name(name) @Parameters.deprecate def __db_print(self,level,msg,*args,**kw): From 673465528c327480fd5ce05f658672e43d30f081 Mon Sep 17 00:00:00 2001 From: Chris B Date: Mon, 25 Jun 2018 16:02:46 +0100 Subject: [PATCH 4/4] Fixed whitespace --- param/parameterized.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/param/parameterized.py b/param/parameterized.py index 669322596..e789a6873 100644 --- a/param/parameterized.py +++ b/param/parameterized.py @@ -1772,7 +1772,7 @@ def inspect_value(cls_or_slf,name): # pylint: disable-msg=E0213 @Parameters.deprecate def _set_name(self,name): return self.param._set_name(name) - + @Parameters.deprecate def __db_print(self,level,msg,*args,**kw): return self.param.__db_print(level,msg,*args,**kw)