Evaluation of ListOperation for repeats

This commit is contained in:
2023-02-19 21:34:18 +02:00
parent bae01efa58
commit cca08b250f

View File

@ -309,7 +309,7 @@ class Sequence(Meta):
"""Resolve cyclic value""" """Resolve cyclic value"""
if isinstance(item, Sequence): if isinstance(item, Sequence):
if isinstance(item, ListOperation): if isinstance(item, ListOperation):
yield from item.evaluate_tree(options, True) yield from item.evaluate(options)
elif isinstance(item, RepeatedSequence): elif isinstance(item, RepeatedSequence):
repeats = item.repeats.get_value() repeats = item.repeats.get_value()
yield from _normal_repeat(item.evaluated_values, repeats, options) yield from _normal_repeat(item.evaluated_values, repeats, options)
@ -694,7 +694,8 @@ class ListOperation(Sequence):
super().__post_init__() super().__post_init__()
self.evaluated_values = self.evaluate() self.evaluated_values = self.evaluate()
def evaluate(self): # pylint: disable=locally-disabled, dangerous-default-value
def evaluate(self, options=DEFAULT_OPTIONS):
"""Evaluates the operation""" """Evaluates the operation"""
def filter_operation(input_list): def filter_operation(input_list):
@ -726,7 +727,7 @@ class ListOperation(Sequence):
(right.values if isinstance(right, Sequence) else [right]), left (right.values if isinstance(right, Sequence) else [right]), left
) )
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 for (x, y) in pairs
] ]
return left return left
@ -790,9 +791,12 @@ class RepeatedSequence(Sequence):
"""Evaluate repeated sequence partially. Leaves Cycles intact.""" """Evaluate repeated sequence partially. Leaves Cycles intact."""
for item in self.values: for item in self.values:
if isinstance(item, Sequence): 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): elif isinstance(item, Cyclic):
yield item # Return the cycle yield item # Return the cycle instead of values
elif isinstance(item, Modification): elif isinstance(item, Modification):
self.local_options = self.local_options | item.as_options() self.local_options = self.local_options | item.as_options()
elif isinstance(item, Rest): elif isinstance(item, Rest):