예제 #1
0
    def is_cyclic(self):
        """
        Whether the composition has a cyclic part end.
        (Returns False if it's a single-part composition).
        """

        if self._is_cyclic is None:
            # Rows don't have an is_cyclic method (why not?)
            # Generate all cyclic part ends and see if ours is one of them.
            if self.is_treble_fixed:
                cyclic_part_ends = [
                    Row.cyclic(self.configs.bells, 1, n)
                    for n in range(self.configs.bells - 1)
                ]
            else:
                cyclic_part_ends = [
                    Row.cyclic(self.configs.bells, 0, n)
                    for n in range(self.configs.bells)
                ]

            self._is_cyclic = self.part_end in cyclic_part_ends

        return self.parts != 1 and self._is_cyclic
예제 #2
0
    def test_row_cyclic(self):
        self.assertEqual(Row.cyclic(0), Row())
        self.assertEqual(Row.cyclic(1), Row('1'))
        self.assertEqual(Row.cyclic(2), Row('12'))
        self.assertEqual(Row.cyclic(3), Row('132'))
        self.assertEqual(Row.cyclic(5), Row('13452'))
        self.assertEqual(Row.cyclic(8), Row('13456782'))

        self.assertEqual(Row.cyclic(3, 0), Row('231'))
        self.assertEqual(Row.cyclic(3, 2), Row('123'))
        self.assertEqual(Row.cyclic(3, 3), Row('123'))
        self.assertEqual(Row.cyclic(3, 9), Row('123'))
        self.assertEqual(Row.cyclic(8, 0), Row('23456781'))
        self.assertEqual(Row.cyclic(8, 2), Row('12456783'))
        self.assertEqual(Row.cyclic(9, 2), Row('124567893'))

        self.assertEqual(Row.cyclic(8, 1, -1), Row('18234567'))
        self.assertEqual(Row.cyclic(8, 1, 0), Row('12345678'))
        self.assertEqual(Row.cyclic(8, 1, 2), Row('14567823'))
        self.assertEqual(Row.cyclic(8, 1, 5), Row('17823456'))
        self.assertEqual(Row.cyclic(8, 1, 7), Row('12345678'))
        self.assertEqual(Row.cyclic(8, 1, 13), Row('18234567'))