def from_pitch_carriers(cls, pitch_carrier_1, pitch_carrier_2): '''Makes numbered interval from `pitch_carrier_1` and `pitch_carrier_2`. :: >>> pitchtools.NumberedInterval.from_pitch_carriers( ... NamedPitch(-2), ... NamedPitch(12), ... ) NumberedInterval(14) Returns numbered interval. ''' from abjad.tools import pitchtools # get pitches pitch_1 = pitchtools.NamedPitch.from_pitch_carrier(pitch_carrier_1) pitch_2 = pitchtools.NamedPitch.from_pitch_carrier(pitch_carrier_2) # get difference in semitones number = pitchtools.NumberedPitch(pitch_2).pitch_number - \ pitchtools.NumberedPitch(pitch_1).pitch_number # change 1.0, 2.0, ... into 1, 2, ... number = mathtools.integer_equivalent_number_to_integer(number) # return numbered interval return cls(number)
def fontsize(self, fontsize): r'''LilyPond ``\fontsize`` markup command. .. container:: example :: >>> markup = Markup('foo') >>> markup = markup.fontsize(-3) :: >>> print(format(markup)) \markup { \fontsize #-3 foo } :: >>> show(markup) # doctest: +SKIP Returns new markup ''' from abjad.tools import markuptools fontsize = float(fontsize) fontsize = mathtools.integer_equivalent_number_to_integer(fontsize) contents = self._parse_markup_command_argument(self) command = markuptools.MarkupCommand( 'fontsize', fontsize, contents, ) return new(self, contents=command)
def _get_format_specification(self): items = [] if self.item_class.__name__.startswith('Named'): items = [str(x) for x in self] elif hasattr(self.item_class, 'pitch_number'): items = [x.pitch_number for x in self] elif hasattr(self.item_class, 'pitch_class_number'): items = [x.pitch_class_number for x in self] elif self.item_class.__name__.startswith('Numbered'): items = [ mathtools.integer_equivalent_number_to_integer(float(x.number)) for x in self ] elif hasattr(self.item_class, '__abs__'): items = [abs(x) for x in self] else: message = 'invalid item class: {!r}.' message = message.format(self.item_class) raise ValueError(message) return systemtools.FormatSpecification( client=self, repr_is_indented=False, repr_kwargs_names=['name'], repr_args_values=[items], storage_format_args_values=[tuple(self._collection)], )
def from_pitch_carriers(cls, pitch_carrier_1, pitch_carrier_2): '''Makes numbered interval from `pitch_carrier_1` and `pitch_carrier_2`. :: >>> pitchtools.NumberedInterval.from_pitch_carriers( ... NamedPitch(-2), ... NamedPitch(12), ... ) NumberedInterval(14) Returns numbered interval. ''' from abjad.tools import pitchtools # get pitches pitch_1 = pitchtools.get_named_pitch_from_pitch_carrier( pitch_carrier_1) pitch_2 = pitchtools.get_named_pitch_from_pitch_carrier( pitch_carrier_2) # get difference in semitones number = abs(pitchtools.NumberedPitch(pitch_2)) - \ abs(pitchtools.NumberedPitch(pitch_1)) # change 1.0, 2.0, ... into 1, 2, ... number = mathtools.integer_equivalent_number_to_integer(number) # return numbered interval return cls(number)
def __init__(self, name='', arrow=None): import abjad if name is None: semitones = 0 elif isinstance(name, str): semitones = 0 if self._is_abbreviation(name): if name in self._abbreviation_to_semitones: semitones = self._abbreviation_to_semitones[name] else: while name and name.startswith(('f', 's')): if name[0] == 's': semitones += 1 else: semitones -= 1 name = name[1:] if name == 'qs': semitones += 0.5 elif name == 'qf': semitones -= 0.5 elif self._is_symbol(name): if name in self._symbol_to_semitones: semitones = self._symbol_to_semitones[name] else: while name and name.startswith(('b', '#')): if name[0] == '#': semitones += 1 else: semitones -= 1 name = name[1:] if name == '+': semitones += 0.5 elif name == '~': semitones -= 0.5 elif name in self._name_to_abbreviation: name = self._name_to_abbreviation[name] semitones = self._abbreviation_to_semitones[name] else: message = 'can not initialize accidental from value: {!r}' message = message.format(name) raise ValueError(message) elif isinstance(name, type(self)): semitones = name.semitones elif isinstance(name, (int, float)): semitones = float(name) assert (semitones % 1.) in (0., 0.5) elif hasattr(name, 'accidental'): semitones = name.accidental.semitones else: message = 'can not initialize accidental from value: {!r}' message = message.format(name) raise ValueError(message) semitones = mathtools.integer_equivalent_number_to_integer(semitones) self._semitones = semitones if arrow not in (None, abjad.Up, abjad.Down): message = 'arrow must be none, up or down: {!r}.' message = message.format(arrow) raise TypeError(message) self._arrow = arrow
def _initialize_by_number(self, argument): argument = round((float(argument) % 12) * 4) / 4 div, mod = divmod(argument, 1) if mod == 0.75: div += 1 elif mod == 0.5: div += 0.5 div %= 12 self._number = mathtools.integer_equivalent_number_to_integer(div)
def _initialize_by_number(self, expr): expr = round((float(expr) % 12) * 4) / 4 div, mod = divmod(expr, 1) if mod == 0.75: div += 1 elif mod == 0.5: div += 0.5 div %= 12 self._pitch_class_number = \ mathtools.integer_equivalent_number_to_integer(div)
def __init__(self, expr=None): from abjad.tools import pitchtools if hasattr(expr, 'pitch_number'): pitch_number = expr.pitch_number elif Pitch.is_pitch_number(expr): pitch_number = expr elif expr is None: pitch_number = 0 else: pitch_number = pitchtools.NamedPitch(expr).pitch_number self._pitch_number = mathtools.integer_equivalent_number_to_integer( pitch_number)
def __init__(self, *args): from abjad.tools import pitchtools if args and \ isinstance(args[0], collections.Iterable) and \ not stringtools.is_string(args[0]) and \ len(args) == 1: args = args[0] if len(args) == 1: if isinstance(args[0], (int, float)): arg = mathtools.integer_equivalent_number_to_integer( float(args[0])) self._initialize_by_pitch_number(arg) elif isinstance(args[0], type(self)): self._initialize_by_named_pitch(*args) elif isinstance(args[0], pitchtools.NumberedPitch): self._initialize_by_pitch_number( args[0].pitch_number) elif isinstance(args[0], pitchtools.PitchClass): self._initialize_by_named_pitch_class_and_octave_number( pitchtools.NamedPitchClass(args[0]), 4) elif hasattr(args[0], 'named_pitch'): self._initialize_by_named_pitch(args[0].named_pitch) elif self.is_pitch_class_octave_number_string(args[0]): self._initialize_by_pitch_class_octave_number_string(*args) elif isinstance(args[0], str): self._initialize_by_pitch_name(*args) else: message = 'can not initialize {} from {!r}.' message = message.format(type(self).__name__, args) raise ValueError(message) elif len(args) == 2: if isinstance(args[0], str): self._initialize_by_pitch_class_name_and_octave_number(*args) elif isinstance(args[0], pitchtools.NamedPitchClass): self._initialize_by_named_pitch_class_and_octave_number(*args) elif isinstance(args[0], (int, float)): if isinstance(args[1], str): self._initialize_by_pitch_number_and_diatonic_pitch_class_name( *args) elif isinstance(args[1], pitchtools.NamedPitchClass): self._initialize_by_pitch_number_and_named_pitch_class(*args) else: raise TypeError else: message = 'can not initialize {}: {!r}.' message = message.format(type(self).__name__, args) raise ValueError(message) elif len(args) == 0: self._initialize_by_pitch_class_name_and_octave_number('c', 4) else: message = 'can not initialize {}: {!r}.' message = message.format(type(self).__name__, args) raise ValueError(message)
def __init__(self, *args): from abjad.tools import pitchtools if args and \ isinstance(args[0], collections.Iterable) and \ not isinstance(args[0], basestring) and \ len(args) == 1: args = args[0] if len(args) == 1: if isinstance(args[0], (int, long, float)): arg = mathtools.integer_equivalent_number_to_integer( float(args[0])) self._initialize_by_pitch_number(arg) elif isinstance(args[0], type(self)): self._initialize_by_named_pitch(*args) elif isinstance(args[0], pitchtools.NumberedPitch): self._initialize_by_pitch_number( args[0].pitch_number) elif isinstance(args[0], pitchtools.PitchClass): self._initialize_by_named_pitch_class_and_octave_number( pitchtools.NamedPitchClass(args[0]), 4) elif hasattr(args[0], 'named_pitch'): self._initialize_by_named_pitch(args[0].named_pitch) elif self.is_pitch_class_octave_number_string(args[0]): self._initialize_by_pitch_class_octave_number_string(*args) elif isinstance(args[0], str): self._initialize_by_pitch_name(*args) else: message = 'can not initialize {} from {!r}.' message = message.format(type(self).__name__, args) raise ValueError(message) elif len(args) == 2: if isinstance(args[0], str): self._initialize_by_pitch_class_name_and_octave_number(*args) elif isinstance(args[0], pitchtools.NamedPitchClass): self._initialize_by_named_pitch_class_and_octave_number(*args) elif isinstance(args[0], (int, long, float)): if isinstance(args[1], str): self._initialize_by_pitch_number_and_diatonic_pitch_class_name( *args) elif isinstance(args[1], pitchtools.NamedPitchClass): self._initialize_by_pitch_number_and_named_pitch_class(*args) else: raise TypeError else: message = 'can not initialize {}: {!r}.' message = message.format(type(self).__name__, args) raise ValueError(message) elif len(args) == 0: self._initialize_by_pitch_class_name_and_octave_number('c', 4) else: message = 'can not initialize {}: {!r}.' message = message.format(type(self).__name__, args) raise ValueError(message)
def __init__(self, pitch_number=None): from abjad.tools import pitchtools if hasattr(pitch_number, 'pitch_number'): pitch_number = pitch_number.pitch_number elif Pitch.is_pitch_number(pitch_number): pitch_number = pitch_number elif pitch_number is None: pitch_number = 0 else: pitch_number = pitchtools.NamedPitch(pitch_number).pitch_number pitch_number = mathtools.integer_equivalent_number_to_integer( pitch_number) self._pitch_number = pitch_number
def __init__(self, pitch_number=None): from abjad.tools import pitchtools if hasattr(pitch_number, "pitch_number"): pitch_number = pitch_number.pitch_number elif Pitch.is_pitch_number(pitch_number): pitch_number = pitch_number elif pitch_number is None: pitch_number = 0 else: pitch_number = pitchtools.NamedPitch(pitch_number).pitch_number pitch_number = mathtools.integer_equivalent_number_to_integer(pitch_number) self._pitch_number = pitch_number
def _get_format_specification(self): if type(self).__name__.startswith('Named'): values = [str(self)] else: values = [ mathtools.integer_equivalent_number_to_integer(float(self)) ] return systemtools.FormatSpecification( client=self, coerce_for_equality=True, storage_format_is_indented=False, storage_format_args_values=values, template_names=['pitch_class_name'], )
def _get_format_specification(self): if self.item_class.__name__.startswith('Named'): repr_items = {str(k): v for k, v in self.items()} else: repr_items = { mathtools.integer_equivalent_number_to_integer(float(k)): v for k, v in self.items() } return systemtools.FormatSpecification( client=self, repr_is_indented=False, repr_args_values=[repr_items], storage_format_args_values=[self._collection], )
def __init__(self, number=0): from abjad.tools import pitchtools if isinstance(number, (int, float)): pass elif isinstance(number, pitchtools.Interval): number = number.semitones elif isinstance(number, pitchtools.IntervalClass): interval_class = pitchtools.NumberedIntervalClass(number) number = interval_class.number else: message = 'can not initialize {} from {!r}.' message = message.format(type(self).__name__, number) raise TypeError(message) number = mathtools.integer_equivalent_number_to_integer(number) self._number = number
def __init__(self, arg=None): from abjad.tools import pitchtools if isinstance(arg, (int, float, int)): number = arg elif isinstance(arg, pitchtools.Interval): number = arg.semitones elif isinstance(arg, pitchtools.IntervalClass): interval_class = pitchtools.NumberedIntervalClass(arg) number = interval_class.number elif arg is None: number = 0 else: message = 'can not initialize {}: {!r}.' message = message.format(type(self).__name__, arg) raise TypeError(message) self._number = mathtools.integer_equivalent_number_to_integer(number)
def _format_argument(argument): if isinstance(argument, str): if argument.startswith('/'): return argument return '({})'.format(argument) elif isinstance(argument, collections.Sequence): if not argument: return '[ ]' contents = ' '.join( Postscript._format_argument(_) for _ in argument) return '[ {} ]'.format(contents) elif isinstance(argument, bool): return str(argument).lower() elif isinstance(argument, (int, float)): argument = mathtools.integer_equivalent_number_to_integer(argument) return str(argument) return str(argument)
def from_pitch_carriers(class_, pitch_carrier_1, pitch_carrier_2): '''Makes numbered interval from `pitch_carrier_1` and `pitch_carrier_2`. .. container:: example >>> abjad.NumberedInterval.from_pitch_carriers( ... abjad.NamedPitch(-2), ... abjad.NamedPitch(12), ... ) NumberedInterval(14) >>> abjad.NumberedInterval.from_pitch_carriers( ... abjad.NamedPitch(12), ... abjad.NamedPitch(12), ... ) NumberedInterval(0) >>> abjad.NumberedInterval.from_pitch_carriers( ... abjad.NamedPitch(9), ... abjad.NamedPitch(12), ... ) NumberedInterval(3) >>> abjad.NumberedInterval.from_pitch_carriers( ... abjad.NamedPitch(12), ... abjad.NamedPitch(9), ... ) NumberedInterval(-3) >>> abjad.NumberedInterval.from_pitch_carriers( ... abjad.NamedPitch(12), ... abjad.NamedPitch(-2), ... ) NumberedInterval(-14) Returns numbered interval. ''' from abjad.tools import pitchtools pitch_1 = pitchtools.NamedPitch.from_pitch_carrier(pitch_carrier_1) pitch_2 = pitchtools.NamedPitch.from_pitch_carrier(pitch_carrier_2) number = pitchtools.NumberedPitch(pitch_2).number - \ pitchtools.NumberedPitch(pitch_1).number number = mathtools.integer_equivalent_number_to_integer(number) return class_(number)
def _format_argument(argument): if isinstance(argument, str): if argument.startswith('/'): return argument return '({})'.format(argument) elif isinstance(argument, collections.Sequence): if not argument: return '[ ]' contents = ' '.join( Postscript._format_argument(_) for _ in argument ) return '[ {} ]'.format(contents) elif isinstance(argument, bool): return str(argument).lower() elif isinstance(argument, (int, float)): argument = mathtools.integer_equivalent_number_to_integer(argument) return str(argument) return str(argument)
def __init__( self, duration=None, units_per_minute=None, textual_indication=None, markup=None, ): from abjad.tools import markuptools from abjad.tools import scoretools self._default_scope = scoretools.Score assert isinstance(textual_indication, (str, type(None))) arguments = (duration, units_per_minute, textual_indication) if all(_ is None for _ in arguments): duration = (1, 4) units_per_minute = 60 if duration: try: duration = durationtools.Duration(duration) except TypeError: duration = durationtools.Duration(*duration) prototype = ( int, float, durationtools.Duration, collections.Sequence, type(None), ) assert isinstance(units_per_minute, prototype) if isinstance(units_per_minute, collections.Sequence): assert len(units_per_minute) == 2 prototype = (int, float, durationtools.Duration) assert all(isinstance(x, prototype) for x in units_per_minute) units_per_minute = tuple(sorted(units_per_minute)) if isinstance(units_per_minute, float): units_per_minute = mathtools.integer_equivalent_number_to_integer( units_per_minute) self._duration = duration self._textual_indication = textual_indication self._units_per_minute = units_per_minute if markup is not None: assert isinstance(markup, markuptools.Markup), repr(markup) self._markup = markup
def test_mathtools_integer_equivalent_number_to_integer_01(): r'''Change integer-equivalent number to integer. ''' assert mathtools.integer_equivalent_number_to_integer(17.0) == 17
def test_mathtools_integer_equivalent_number_to_integer_02(): r'''Returns noninteger-equivalent number unchanged. ''' assert mathtools.integer_equivalent_number_to_integer(17.5) == 17.5
def _initialize_by_number(self, expr): self._pitch_class_number = mathtools.integer_equivalent_number_to_integer(round((float(expr) % 12) * 2) / 2)
def _initialize_by_number(self, expr): self._pitch_class_number = \ mathtools.integer_equivalent_number_to_integer( round((float(expr) % 12) * 2) / 2)