Fixed some bugs and added new tests

New test_multi_03 can be used to test multiple variables at once. Based on new collect function that can be used to collect n variables from parsed Ziffers.
This commit is contained in:
2023-03-05 13:31:52 +02:00
parent 004578e56e
commit ea0e9ae0cd
8 changed files with 58 additions and 25 deletions

View File

@ -1,6 +1,5 @@
from .parser import *
from .mapper import *
from .classes import *
from .common import *
from .defaults import *
from .scale import *

View File

@ -133,6 +133,10 @@ class Event(Item):
duration: float = field(default=None)
def get_duration(self):
"""Getter for duration"""
return self.duration
@dataclass
class Rest(Event):
@ -202,10 +206,6 @@ class Pitch(Event):
"""Getter for pitche"""
return self.pitch_class
def get_duration(self):
"""Getter for duration"""
return self.duration
def update_note(self, force: bool = False):
"""Update note if Key, Scale and Pitch-class are present"""
if (

View File

@ -155,3 +155,25 @@ class Ziffers(Sequence):
for val in self.evaluated_values
if isinstance(val, (Pitch, Chord))
]
def collect(self, num: int = None, keys: str | list = None) -> list:
"""Collect n items from parsed Ziffers"""
if num is None:
num = len(self.evaluated_values)
if keys is None or isinstance(keys, str):
keys = [keys]
all_items = []
values = []
for key in keys:
for i in range(num):
if key is not None:
values.append(getattr(self[i], key, None))
else:
values.append(self[i])
all_items.append(values)
values = []
if len(all_items) > 1:
return all_items
if len(all_items) == 1:
return all_items[0]
return None

View File

@ -357,8 +357,10 @@ class ListOperation(Sequence):
"""Vertical arpeggio operation, eg. (135)@(q 1 2 021)"""
left = _filter_operation(left, options)
right = _filter_operation(right, options)
left = list(left.evaluate_tree(options))
right = list(right.evaluate_tree(options))
if not isinstance(left,list):
left = list(left.evaluate_tree(options))
if not isinstance(right,list):
right = list(right.evaluate_tree(options))
arp_items = []
for item in left:

View File

@ -53,7 +53,6 @@ def z(expr: str, **opts) -> Ziffers:
"""Shortened method name for zparse"""
return zparse(expr, **opts)
def yield_items(gen: Ziffers, num: int, key: str = None) -> list:
"""Yield n items from parsed Ziffers"""
for i in range(num):
@ -62,7 +61,7 @@ def yield_items(gen: Ziffers, num: int, key: str = None) -> list:
else:
yield gen[i]
def collect(gen: Ziffers, num: int, key: str = None) -> list:
"""Collect n-item from parsed Ziffers"""
def get_items(gen: Ziffers, num: int, key: str = None) -> list:
"""Get n-item from parsed Ziffers. Functional alternative to Ziffers-object collect method."""
return list(yield_items(gen,num,key))