From f6f75cd7912526cf06031e6bbb47641164d23540 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 13 Feb 2018 00:59:11 +0100 Subject: [PATCH] A small rework of the Python PCell helpers The aim of this rework was to enable PCell implementations that use the basic methods rather than the "_impl" variants. For the latter, potential variable name clashes happen when parameters are called "cell", "layout", "layer" or similar. New methods enable implementation on the level of the non-"impl" methods. For example: def produce(self, layout, layers, parameters, cell): self.init_values(parameters, layers) ... self.finish() --- .../pcell_declaration_helper.lym | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/src/db/db/built-in-pymacros/pcell_declaration_helper.lym b/src/db/db/built-in-pymacros/pcell_declaration_helper.lym index 22a175075..f0b6c0003 100644 --- a/src/db/db/built-in-pymacros/pcell_declaration_helper.lym +++ b/src/db/db/built-in-pymacros/pcell_declaration_helper.lym @@ -332,7 +332,38 @@ class _PCellDeclarationHelper(pya.PCellDeclaration): gets the parameters """ return self._param_decls + + def get_values(self): + """ + gets the temporary parameter values + """ + v = self._param_values + self._param_values = None + return v + def init_values(self, values = None, layers = None): + """ + initializes the temporary parameter values + "values" are the original values. If "None" is given, the + default values will be used. + "layers" are the layer indexes corresponding to the layer + parameters. + """ + if not values: + self._param_values = [] + for pd in self._param_decls: + self._param_values.append(pd.default) + else: + self._param_values = values + self._layers = layers + + def finish(self): + """ + Needs to be called at the end of produce() after init_values was used + """ + self._param_values = None + self._layers = None + def get_layers(self, parameters): """ get the layer definitions @@ -346,25 +377,23 @@ class _PCellDeclarationHelper(pya.PCellDeclaration): """ coerce parameters (make consistent) """ - self._param_values = parameters + self.init_values(parameters) self.layout = layout self.coerce_parameters_impl() self.layout = None - return self._param_values + return self.get_values() def produce(self, layout, layers, parameters, cell): """ coerce parameters (make consistent) """ - self._layers = layers + self.init_values(parameters, layers) self.cell = cell - self._param_values = parameters self.layout = layout self.produce_impl() - self._layers = None self.cell = None - self._param_values = None self.layout = None + self.finish() def can_create_from_shape(self, layout, shape, layer): """ @@ -397,9 +426,7 @@ class _PCellDeclarationHelper(pya.PCellDeclaration): produce a helper for parameters_from_shape with this helper, the implementation can use the parameter setters """ - self._param_values = [] - for pd in self._param_decls: - self._param_values.append(pd.default) + self.init_values() self.layout = layout self.shape = shape self.layer = layer @@ -407,7 +434,7 @@ class _PCellDeclarationHelper(pya.PCellDeclaration): self.layout = None self.shape = None self.layer = None - return self._param_values + return self.get_values() def display_text_impl(self): """