Beispiel #1
0
 def setUp(self) -> None:
     self.sequence: core_events.SequentialEvent[
         core_events.SimpleEvent] = core_events.SequentialEvent([
             core_events.SimpleEvent(1),
             core_events.SimpleEvent(2),
             core_events.SimpleEvent(3),
         ])
Beispiel #2
0
    def test_mutate_parameter(self):
        dummy_parameter_tuple = (
            self.DummyParameter(1),
            self.DummyParameter(2),
            None,
        )
        simple_event_tuple = (
            core_events.SimpleEvent(1),
            core_events.SimpleEvent(1),
            core_events.SimpleEvent(2),
        )
        for simple_event, dummy_parameter in zip(simple_event_tuple,
                                                 dummy_parameter_tuple):
            if dummy_parameter is not None:
                simple_event.dummy_parameter = dummy_parameter  # type: ignore
        simultaneous_event = core_events.SimultaneousEvent(
            simple_event_tuple).destructive_copy()
        simultaneous_event.mutate_parameter(
            "dummy_parameter",
            lambda dummy_parameter: dummy_parameter.double_value(),
        )
        for event, dummy_parameter in zip(simultaneous_event,
                                          dummy_parameter_tuple):
            if dummy_parameter is not None:
                expected_dummy_parameter = self.DummyParameter(
                    dummy_parameter.value * 2)
            else:
                expected_dummy_parameter = None

            self.assertEqual(event.get_parameter("dummy_parameter"),
                             expected_dummy_parameter)
Beispiel #3
0
    def test_split_child_at(self):
        sequential_event0 = core_events.SequentialEvent(
            [core_events.SimpleEvent(3)])
        sequential_event0.split_child_at(1)
        sequential_event_to_compare0 = core_events.SequentialEvent(
            [core_events.SimpleEvent(1),
             core_events.SimpleEvent(2)])
        self.assertEqual(sequential_event0, sequential_event_to_compare0)

        sequential_event1 = core_events.SequentialEvent(
            [core_events.SimpleEvent(4),
             core_events.SimpleEvent(1)])
        sequential_event1.split_child_at(3)
        sequential_event_to_compare1 = core_events.SequentialEvent([
            core_events.SimpleEvent(3),
            core_events.SimpleEvent(1),
            core_events.SimpleEvent(1),
        ])
        self.assertEqual(sequential_event1, sequential_event_to_compare1)

        sequential_event2 = core_events.SequentialEvent(
            [core_events.SimpleEvent(3),
             core_events.SimpleEvent(2)])
        sequential_event2_copy = sequential_event2.copy()
        sequential_event2.split_at(3)
        self.assertEqual(sequential_event2, sequential_event2_copy)
Beispiel #4
0
 def test_split_child_at(self):
     simultaneous_event0 = core_events.SimultaneousEvent(
         [core_events.SequentialEvent([core_events.SimpleEvent(3)])])
     simultaneous_event0.split_child_at(1)
     simultaneous_event_to_compare0 = core_events.SimultaneousEvent([
         core_events.SequentialEvent(
             [core_events.SimpleEvent(1),
              core_events.SimpleEvent(2)])
     ])
     self.assertEqual(simultaneous_event0, simultaneous_event_to_compare0)
Beispiel #5
0
 def test_squash_in_with_minor_differences(self):
     self.assertEqual(
         self.sequence.squash_in(6e-10,
                                 core_events.SimpleEvent(1),
                                 mutate=False),
         core_events.SequentialEvent([
             core_events.SimpleEvent(duration)
             for duration in (6e-10, 1, 2 - 6e-10, 3)
         ]),
     )
Beispiel #6
0
 def test_filter(self):
     simultaneous_event_to_filter = core_events.SimultaneousEvent([
         core_events.SimpleEvent(1),
         core_events.SimpleEvent(3),
         core_events.SimpleEvent(2),
     ])
     simultaneous_event_to_filter.filter(lambda event: event.duration > 2)
     self.assertEqual(
         simultaneous_event_to_filter,
         core_events.SimultaneousEvent([core_events.SimpleEvent(3)]),
     )
Beispiel #7
0
    def test_cut_off(self):
        event0 = core_events.SimpleEvent(4)
        cut_off_event0 = core_events.SimpleEvent(2)

        event1 = core_events.SimpleEvent(10)
        cut_off_event1 = core_events.SimpleEvent(5)

        self.assertEqual(event0.cut_off(0, 2, mutate=False), cut_off_event0)
        self.assertEqual(event0.cut_off(2, 5, mutate=False), cut_off_event0)

        event1.cut_off(0, 5)
        self.assertEqual(event1, cut_off_event1)
Beispiel #8
0
    def test_cut_up(self):
        result = core_events.SimultaneousEvent(
            [core_events.SimpleEvent(0.5) for _ in range(3)])

        self.assertEqual(
            [event.duration for event in result],
            [
                event.duration
                for event in self.sequence.cut_out(0.5, 1, mutate=False)
            ],
        )
        self.assertEqual(
            [event.duration for event in result],
            [
                event.duration
                for event in self.sequence.cut_out(0, 0.5, mutate=False)
            ],
        )
        self.assertEqual(
            [event.duration for event in result],
            [
                event.duration
                for event in self.sequence.cut_out(0.25, 0.75, mutate=False)
            ],
        )

        # this will raise an error because the simultaneous event contains simple events
        # where some simple event aren't long enough for the following cut up arguments.
        self.assertRaises(ValueError, lambda: self.sequence.cut_out(2, 3))
Beispiel #9
0
 def test_get_flat_assigned_parameter(self):
     duration = 10
     self.assertEqual(
         core_events.SimpleEvent(duration).get_parameter("duration",
                                                         flat=True),
         (duration, ),
     )
Beispiel #10
0
 def test_parameter_to_compare_tuple(self):
     simple_event = core_events.SimpleEvent(1)
     expected_parameter_to_compare_tuple = ("duration", )
     self.assertEqual(
         simple_event._parameter_to_compare_tuple,
         expected_parameter_to_compare_tuple,
     )
Beispiel #11
0
 def test_convert_sequential_event(self):
     sequential_event = core_events.SequentialEvent(
         [core_events.SimpleEvent(2) for _ in range(5)])
     tempo_envelope = expenvelope.Envelope.from_levels_and_durations(
         levels=[
             30,
             core_parameters.TempoPoint(30),
             60,
             core_parameters.TempoPoint(60),
             30,
             30,
             60,
             30,
             60,
             core_parameters.TempoPoint(30, reference=1),
             core_parameters.TempoPoint(30,
                                        reference=2),  # -> 60 BPM for ref=1
         ],
         durations=[2, 0, 1, 0, 1, 2, 0, 2, 0, 2],
         curve_shapes=[0, 0, 0, 0, 0, 0, 0, 10, 0, -10],
     )
     converter = core_converters.TempoConverter(tempo_envelope)
     converted_sequential_event = converter.convert(sequential_event)
     expected_durations = (4, 3, 3, 3.8000908039820196, 2.1999091960179804)
     self.assertEqual(converted_sequential_event.get_parameter("_duration"),
                      expected_durations)
Beispiel #12
0
 def test_convert_simultaneous_event(self):
     tempo_envelope = expenvelope.Envelope.from_levels_and_durations(
         levels=[30, 60], durations=[4])
     simple_event0 = core_events.SimpleEvent(4)
     simple_event1 = core_events.SimpleEvent(8)
     simultaneous_event = core_events.SimultaneousEvent(
         [simple_event0, simple_event0, simple_event1])
     converter = core_converters.TempoConverter(tempo_envelope)
     converted_simultaneous_event = converter.convert(simultaneous_event)
     expected_duration0 = simultaneous_event[0].duration * 1.5
     expected_duration1 = 10
     self.assertEqual(converted_simultaneous_event[0].duration,
                      expected_duration0)
     self.assertEqual(converted_simultaneous_event[1].duration,
                      expected_duration0)
     self.assertEqual(converted_simultaneous_event[2].duration,
                      expected_duration1)
Beispiel #13
0
    def test_equality_check(self):
        simple_event0 = core_events.SimpleEvent(2)
        simple_event1 = core_events.SimpleEvent(3)
        simple_event2 = core_events.SimpleEvent(2)
        simple_event3 = core_events.SimpleEvent(2.3)

        self.assertEqual(simple_event0, simple_event2)
        self.assertEqual(simple_event2, simple_event0)  # different order
        self.assertEqual(simple_event0, simple_event0)
        self.assertEqual(simple_event2, simple_event2)

        self.assertNotEqual(simple_event0, simple_event1)
        self.assertNotEqual(simple_event1, simple_event0)  # different order
        self.assertNotEqual(simple_event0, simple_event3)
        self.assertNotEqual(simple_event2, simple_event3)
        self.assertNotEqual(simple_event2, simple_event2.duration)
        self.assertNotEqual(simple_event0, [1, 2, 3])
Beispiel #14
0
 def test_convert_simple_event(self):
     tempo_envelope = expenvelope.Envelope.from_levels_and_durations(
         levels=[30, 60], durations=[4])
     simple_event = core_events.SimpleEvent(4)
     converter = core_converters.TempoConverter(tempo_envelope)
     converted_simple_event = converter.convert(simple_event)
     expected_duration = 6
     self.assertEqual(converted_simple_event.duration, expected_duration)
Beispiel #15
0
 def test_destructive_copy(self):
     simple_event = core_events.SimpleEvent(2)
     simultaneous_event = core_events.SimultaneousEvent(
         [simple_event, simple_event])
     copied_simultaneous_event = simultaneous_event.destructive_copy()
     copied_simultaneous_event[0].duration = 10
     self.assertNotEqual(copied_simultaneous_event[0].duration,
                         copied_simultaneous_event[1].duration)
Beispiel #16
0
 def test_set_not_assigned_parameter(self):
     simple_event = core_events.SimpleEvent(1)
     new_unknown_parameter = 10
     new_unknown_parameter_name = "new"
     simple_event.set_parameter("new",
                                new_unknown_parameter,
                                set_unassigned_parameter=True)
     self.assertEqual(
         simple_event.get_parameter(new_unknown_parameter_name),
         new_unknown_parameter,
     )
Beispiel #17
0
 def test_cut_up(self):
     result0 = core_events.SequentialEvent([
         core_events.SimpleEvent(0.5),
         core_events.SimpleEvent(2),
         core_events.SimpleEvent(2),
     ])
     result1 = core_events.SequentialEvent([core_events.SimpleEvent(1)])
     self.assertEqual(
         [event.duration for event in result0],
         [
             event.duration
             for event in self.sequence.cut_out(0.5, 5, mutate=False)
         ],
     )
     self.assertEqual(
         [event.duration for event in result1],
         [
             event.duration
             for event in self.sequence.cut_out(1, 2, mutate=False)
         ],
     )
Beispiel #18
0
    def test_split_at(self):
        event = core_events.SimpleEvent(4)

        split0 = (core_events.SimpleEvent(1), core_events.SimpleEvent(3))
        split1 = (core_events.SimpleEvent(2), core_events.SimpleEvent(2))
        split2 = (core_events.SimpleEvent(3), core_events.SimpleEvent(1))

        self.assertEqual(event.split_at(1), split0)
        self.assertEqual(event.split_at(2), split1)
        self.assertEqual(event.split_at(3), split2)
Beispiel #19
0
    def test_cut_off(self):
        result0 = core_events.SimultaneousEvent([
            core_events.SimpleEvent(duration) for duration in (0.5, 1.5, 2.5)
        ])
        result1 = core_events.SimultaneousEvent(
            [core_events.SimpleEvent(duration) for duration in (1, 2, 2.5)])

        self.assertEqual(
            [event.duration for event in result0],
            [
                event.duration
                for event in self.sequence.cut_off(0, 0.5, mutate=False)
            ],
        )
        self.assertEqual(
            [event.duration for event in result1],
            [
                event.duration
                for event in self.sequence.cut_off(2.5, 3, mutate=False)
            ],
        )
Beispiel #20
0
    def test_squash_in(self):
        self.assertRaises(
            TypeError,
            lambda: self.sequence.squash_in(
                0, core_events.SimpleEvent(1.5), mutate=False),
        )

        simultaneous_event_to_test = core_events.SimultaneousEvent([
            core_events.SequentialEvent(
                [core_events.SimpleEvent(duration) for duration in (2, 3)]),
            core_events.SequentialEvent([
                core_events.SimpleEvent(duration) for duration in (1, 1, 1, 2)
            ]),
        ])
        expected_simultaneous_event = core_events.SimultaneousEvent([
            core_events.SequentialEvent([
                core_events.SimpleEvent(duration) for duration in (1, 1.5, 2.5)
            ]),
            core_events.SequentialEvent([
                core_events.SimpleEvent(duration)
                for duration in (1, 1.5, 0.5, 2)
            ]),
        ])

        self.assertEqual(
            simultaneous_event_to_test.squash_in(1,
                                                 core_events.SimpleEvent(1.5),
                                                 mutate=False),
            expected_simultaneous_event,
        )
Beispiel #21
0
 def test_tie_by(self):
     self.assertEqual(
         self.sequence.tie_by(
             lambda event_left, event_right: event_left.duration + 1 ==
             event_right.duration,
             event_type_to_examine=core_events.SimpleEvent,
             mutate=False,
         ),
         core_events.SequentialEvent(
             [core_events.SimpleEvent(3),
              core_events.SimpleEvent(3)]),
     )
     self.assertEqual(
         self.sequence.tie_by(
             lambda event_left, event_right: event_left.duration + 1 ==
             event_right.duration,
             lambda event_to_survive, event_to_remove: None,
             event_type_to_examine=core_events.SimpleEvent,
             event_to_remove=False,
             mutate=False,
         ),
         core_events.SequentialEvent([core_events.SimpleEvent(3)]),
     )
     self.assertEqual(
         self.sequence.tie_by(
             lambda event_left, event_right: event_left.duration + 1 ==
             event_right.duration,
             lambda event_to_survive, event_to_remove: None,
             event_type_to_examine=core_events.SimpleEvent,
             event_to_remove=True,
             mutate=False,
         ),
         core_events.SequentialEvent(
             [core_events.SimpleEvent(1),
              core_events.SimpleEvent(3)]),
     )
Beispiel #22
0
 def setUp(self) -> None:
     self.sequence: core_events.SimultaneousEvent[
         core_events.SimpleEvent] = core_events.SimultaneousEvent([
             core_events.SimpleEvent(1),
             core_events.SimpleEvent(2),
             core_events.SimpleEvent(3),
         ])
     self.nested_sequence: core_events.SimultaneousEvent[
         core_events.SequentialEvent[
             core_events.SimpleEvent]] = core_events.SimultaneousEvent([
                 core_events.SequentialEvent([
                     core_events.SimpleEvent(1),
                     core_events.SimpleEvent(2),
                     core_events.SimpleEvent(3),
                 ]) for _ in range(2)
             ])
Beispiel #23
0
 def test_cut_off(self):
     result0 = core_events.SequentialEvent([
         core_events.SimpleEvent(0.5),
         core_events.SimpleEvent(2),
         core_events.SimpleEvent(3),
     ])
     result1 = core_events.SequentialEvent([core_events.SimpleEvent(1)])
     result2 = core_events.SequentialEvent(
         [core_events.SimpleEvent(1),
          core_events.SimpleEvent(0.75)])
     self.assertEqual(
         [event.duration for event in result0],
         [
             event.duration
             for event in self.sequence.cut_off(0.5, 1, mutate=False)
         ],
     )
     self.assertEqual(
         [event.duration for event in result1],
         [
             event.duration
             for event in self.sequence.cut_off(1, 6, mutate=False)
         ],
     )
     self.assertEqual(
         [event.duration for event in result1],
         [
             event.duration
             for event in self.sequence.cut_off(1, 7, mutate=False)
         ],
     )
     self.assertEqual(
         [event.duration for event in result2],
         [
             event.duration
             for event in self.sequence.cut_off(1.75, 7, mutate=False)
         ],
     )
Beispiel #24
0
    def test_cut_up(self):
        event0 = core_events.SimpleEvent(4)
        cut_up_event0 = core_events.SimpleEvent(2)

        event1 = core_events.SimpleEvent(10)
        cut_up_event1 = core_events.SimpleEvent(5)

        event2 = core_events.SimpleEvent(5)
        cut_up_event2 = core_events.SimpleEvent(1)

        event2.cut_out(2, 3)

        self.assertEqual(
            event0.cut_out(2, 4, mutate=False).duration,
            cut_up_event0.duration)
        self.assertEqual(
            event1.cut_out(0, 5, mutate=False).duration,
            cut_up_event1.duration)
        self.assertEqual(event2.duration, cut_up_event2.duration)

        # this will raise an error because the simple event isn't within the
        # asked range.
        self.assertRaises(ValueError, lambda: event0.cut_out(4, 5))
        self.assertRaises(ValueError, lambda: event0.cut_out(-2, -1))
Beispiel #25
0
 def test_convert_without_attribute(self):
     self.assertEqual(
         self.simple_event_to_attribute.convert(
             core_events.SimpleEvent(10)),
         float("inf"),
     )
Beispiel #26
0
 def test_convert_with_attribute(self):
     simple_event = core_events.SimpleEvent(10)
     simple_event.dummy_attribute = 100  # type: ignore
     self.assertEqual(self.simple_event_to_attribute.convert(simple_event),
                      100)
Beispiel #27
0
 def test_set_assigned_parameter_by_function(self):
     old_duration = 1
     simple_event = core_events.SimpleEvent(old_duration)
     simple_event.set_parameter("duration",
                                lambda old_duration: old_duration * 2)
     self.assertEqual(simple_event.duration, old_duration * 2)
Beispiel #28
0
 def test_set_assigned_parameter_by_object(self):
     simple_event = core_events.SimpleEvent(1)
     new_duration = 10
     simple_event.set_parameter("duration", new_duration)
     self.assertEqual(simple_event.duration, new_duration)
Beispiel #29
0
 def test_squash_in(self):
     self.assertEqual(
         self.sequence.squash_in(0.5,
                                 core_events.SimpleEvent(1),
                                 mutate=False),
         core_events.SequentialEvent([
             core_events.SimpleEvent(duration)
             for duration in (0.5, 1, 1.5, 3)
         ]),
     )
     self.assertEqual(
         self.sequence.squash_in(5,
                                 core_events.SimpleEvent(2),
                                 mutate=False),
         core_events.SequentialEvent([
             core_events.SimpleEvent(duration) for duration in (1, 2, 2, 2)
         ]),
     )
     self.assertEqual(
         self.sequence.squash_in(0,
                                 core_events.SimpleEvent(1.5),
                                 mutate=False),
         core_events.SequentialEvent([
             core_events.SimpleEvent(duration) for duration in (1.5, 1.5, 3)
         ]),
     )
     self.assertEqual(
         self.sequence.squash_in(6,
                                 core_events.SimpleEvent(1),
                                 mutate=False),
         core_events.SequentialEvent([
             core_events.SimpleEvent(duration) for duration in (1, 2, 3, 1)
         ]),
     )
     self.assertEqual(
         self.sequence.squash_in(0.5,
                                 core_events.SimpleEvent(0.25),
                                 mutate=False),
         core_events.SequentialEvent([
             core_events.SimpleEvent(duration)
             for duration in (0.5, 0.25, 0.25, 2, 3)
         ]),
     )
     self.assertRaises(
         ValueError,
         lambda: self.sequence.squash_in(
             7, core_events.SimpleEvent(1.5), mutate=False),
     )
Beispiel #30
0
    def test_tie_by_for_nested_events(self):
        nested_sequential_event0 = core_events.SequentialEvent([
            core_events.SequentialEvent(
                [core_events.SimpleEvent(3),
                 core_events.SimpleEvent(2)]),
            core_events.SequentialEvent(
                [core_events.SimpleEvent(4),
                 core_events.SimpleEvent(2)]),
        ])
        nested_sequential_event0.tie_by(
            lambda event_left, event_right: event_left.duration - 1 ==
            event_right.duration,
            event_type_to_examine=core_events.SimpleEvent,
            event_to_remove=True,
        )

        self.assertEqual(
            nested_sequential_event0,
            core_events.SequentialEvent([
                core_events.SequentialEvent([core_events.SimpleEvent(5)]),
                core_events.SequentialEvent(
                    [core_events.SimpleEvent(4),
                     core_events.SimpleEvent(2)]),
            ]),
        )

        nested_sequential_event1 = core_events.SequentialEvent([
            core_events.SequentialEvent(
                [core_events.SimpleEvent(3),
                 core_events.SimpleEvent(2)]),
            core_events.SequentialEvent([core_events.SimpleEvent(5)]),
        ])
        nested_sequential_event1.tie_by(
            lambda event_left, event_right: event_left.duration == event_right.
            duration,
            event_to_remove=True,
        )
        self.assertEqual(
            nested_sequential_event1,
            core_events.SequentialEvent([
                core_events.SequentialEvent(
                    [core_events.SimpleEvent(6),
                     core_events.SimpleEvent(4)])
            ]),
        )