From cca08b250f5f76165c29ffc268f8e0a0529e8b67 Mon Sep 17 00:00:00 2001 From: Miika Alonen Date: Sun, 19 Feb 2023 21:34:18 +0200 Subject: [PATCH] Evaluation of ListOperation for repeats --- ziffers/classes.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ziffers/classes.py b/ziffers/classes.py index 778def9..b9a2845 100644 --- a/ziffers/classes.py +++ b/ziffers/classes.py @@ -309,7 +309,7 @@ class Sequence(Meta): """Resolve cyclic value""" if isinstance(item, Sequence): if isinstance(item, ListOperation): - yield from item.evaluate_tree(options, True) + yield from item.evaluate(options) elif isinstance(item, RepeatedSequence): repeats = item.repeats.get_value() yield from _normal_repeat(item.evaluated_values, repeats, options) @@ -694,7 +694,8 @@ class ListOperation(Sequence): super().__post_init__() self.evaluated_values = self.evaluate() - def evaluate(self): + # pylint: disable=locally-disabled, dangerous-default-value + def evaluate(self, options=DEFAULT_OPTIONS): """Evaluates the operation""" def filter_operation(input_list): @@ -726,7 +727,7 @@ class ListOperation(Sequence): (right.values if isinstance(right, Sequence) else [right]), left ) left = [ - Pitch(pitch_class=operation(x.get_value(), y.get_value())) + Pitch(pitch_class=operation(x.get_value(), y.get_value()), kwargs=options) for (x, y) in pairs ] return left @@ -790,9 +791,12 @@ class RepeatedSequence(Sequence): """Evaluate repeated sequence partially. Leaves Cycles intact.""" for item in self.values: if isinstance(item, Sequence): - yield from item + if isinstance(item, ListOperation): + yield from item.evaluate_tree(self.local_options, True) + else: + yield from item elif isinstance(item, Cyclic): - yield item # Return the cycle + yield item # Return the cycle instead of values elif isinstance(item, Modification): self.local_options = self.local_options | item.as_options() elif isinstance(item, Rest):