diff --git a/src/pymor/algorithms/projection.py b/src/pymor/algorithms/projection.py index d8c7e1faba..336c271391 100644 --- a/src/pymor/algorithms/projection.py +++ b/src/pymor/algorithms/projection.py @@ -212,8 +212,12 @@ def action_EmpiricalInterpolatedOperator(self, op): def action_AffineOperator(self, op): return self.apply(op.affine_shift + op.linear_part) - @match_class(LincombOperator, SelectionOperator) - def action_recurse(self, op): + @match_class(LincombOperator) + def action_LincombOperator(self, op): + return self.replace_children(op).with_(solver_options=None) + + @match_class(SelectionOperator) + def action_SelectionOperator(self, op): return self.replace_children(op) @match_class(OperatorInterface) @@ -278,7 +282,7 @@ def action_NumpyMatrixOperator(self, op): @match_class(ConstantOperator) def action_ConstantOperator(self, op): - dim_range, dim_source = self.dim_range, self.dim_srouce + dim_range, dim_source = self.dim_range, self.dim_source source = op.source if dim_source is None else NumpyVectorSpace(dim_source, op.source.id) value = op._value if dim_range is None else NumpyVectorSpace(op._value.to_numpy()[:, :dim_range], op.range.id) return ConstantOperator(value, source, name=op.name) @@ -303,7 +307,7 @@ def action_ProjectedEmpiciralInterpolatedOperator(self, op): @match_class(ProjectedOperator) def action_ProjectedOperator(self, op): - dim_range, dim_source = self.dim_range, self.dim_srouce + dim_range, dim_source = self.dim_range, self.dim_source source_basis = op.source_basis if dim_source is None \ else op.source_basis[:dim_source] range_basis = op.range_basis if dim_range is None \