Source code for tsmakers.Cursor

import abjad


[docs]class Cursor(object): r"""A cursor. .. container:: example .. container:: >>> cursor = tsmakers.Cursor([1, 2, 3]) >>> next(cursor) 1 >>> next(cursor) 2 >>> next(cursor) 3 >>> next(cursor) 1 >>> next(cursor) 2 >>> cursor.backtrack() 2 >>> cursor.backtrack() 1 >>> cursor.backtrack() 3 >>> next(cursor) 3 >>> next(cursor) 1 .. container:: example >>> talea = abjadext.rmakers.Talea( ... counts=(2, 1, 3, 2, 4, 1, 1), ... denominator=16, ... ) >>> cursor = tsmakers.Cursor(talea) >>> for _ in range(10): ... next(cursor) ... Duration(1, 8) Duration(1, 16) Duration(3, 16) Duration(1, 8) Duration(1, 4) Duration(1, 16) Duration(1, 16) Duration(1, 8) Duration(1, 16) Duration(3, 16) """ ### CLASS VARIABLES ### __slots__ = ( "_sequence", "_index", ) ### INITIALIZER ### def __init__(self, sequence=(1, 2, 3), index=None): self._sequence = abjad.CyclicTuple(sequence) if index is not None: index = int(index) self._index = index
[docs] def __str__(self): return abjad.storage(self)
[docs] def __repr__(self): return abjad.storage(self)
### SPECIAL METHODS ###
[docs] def __iter__(self): while True: yield self.next()
[docs] def __next__(self): return self.next()
### PUBLIC METHODS ###
[docs] def backtrack(self): if not self._sequence: return if self._index is None: self._index = 0 self._index -= 1 index = self._index return self._sequence[index]
[docs] def next(self): if not self._sequence: return if self._index is None: self._index = 1 return self._sequence[0] index = self._index self._index += 1 return self._sequence[index]
### PUBLIC PROPERTIES ### @property def index(self): return self._index @property def sequence(self): return self._sequence