def evaluate(self): r'''Evaluate division set expression lookup expression. Returns payload expression. ''' from experimental.tools import musicexpressiontools expression = self.offset.evaluate() offset = expression.payload[0] timespan_inventory = \ self._get_timespan_scoped_single_context_set_expressions( self.attribute) time_relation = timerelationtools.offset_happens_during_timespan( offset=offset) candidate_set_expressions = \ timespan_inventory.get_timespans_that_satisfy_time_relation( time_relation) root_specification = self.root_specification source_expression_set_expression = \ root_specification._get_first_expression_that_governs_context_name( candidate_set_expressions, self.voice_name) assert source_expression_set_expression is not None expression = source_expression_set_expression.source_expression assert isinstance( expression, musicexpressiontools.IterablePayloadExpression) expression = self._apply_callbacks(expression) return expression
def evaluate(self): r'''Evaluate rhythm set expression lookup expression. Returns none when nonevaluable. Returns start-positioned rhythm payload expression when evaluable. ''' from experimental.tools import musicexpressiontools expression = self.offset.evaluate() if expression is None: return offset = expression.payload[0] timespan_inventory = \ self._get_timespan_scoped_single_context_set_expressions( self.attribute) time_relation = timerelationtools.offset_happens_during_timespan( offset=offset) candidate_set_expressions = \ timespan_inventory.get_timespans_that_satisfy_time_relation( time_relation) source_expression_set_expression = \ self.root_specification._get_first_expression_that_governs_context_name( candidate_set_expressions, self.voice_name) assert source_expression_set_expression is not None assert isinstance(source_expression_set_expression, musicexpressiontools.TimespanScopedSingleContextSetExpression) expression = source_expression_set_expression.source_expression if isinstance(expression, musicexpressiontools.RhythmMakerExpression): expression = self._apply_callbacks(expression) return expression elif isinstance( expression, musicexpressiontools.StartPositionedRhythmPayloadExpression): # clone to prevent callbacks from inadvertantly changing source_expression expression expression = expression._clone() expression = self._apply_callbacks(expression) return expression else: raise TypeError(expression)