Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
 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)],
     )
Beispiel #4
0
    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)
Beispiel #5
0
 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)
Beispiel #7
0
 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)
Beispiel #8
0
 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)
Beispiel #9
0
 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)
Beispiel #10
0
 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)
Beispiel #11
0
 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)
Beispiel #12
0
 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
Beispiel #13
0
    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
Beispiel #14
0
 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'],
     )
Beispiel #15
0
 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],
     )
Beispiel #16
0
 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
Beispiel #17
0
 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)
Beispiel #18
0
 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)
Beispiel #19
0
    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)
Beispiel #20
0
 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)
Beispiel #21
0
 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
Beispiel #22
0
 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
Beispiel #23
0
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
Beispiel #24
0
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
Beispiel #25
0
 def _initialize_by_number(self, expr):
     self._pitch_class_number = mathtools.integer_equivalent_number_to_integer(round((float(expr) % 12) * 2) / 2)
Beispiel #26
0
 def _initialize_by_number(self, expr):
     self._pitch_class_number = \
         mathtools.integer_equivalent_number_to_integer(
             round((float(expr) % 12) * 2) / 2)