Skip to content

Commit 76c325b

Browse files
Fix the tests to match the new API shape, and fix two bugs found.
1 parent 08174e6 commit 76c325b

File tree

5 files changed

+80
-20
lines changed

5 files changed

+80
-20
lines changed

music21/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
'''
5151
from __future__ import annotations
5252

53-
__version__ = '9.6.0b3'
53+
__version__ = '9.6.0b4'
5454

5555
def get_version_tuple(vv):
5656
v = vv.split('.')

music21/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<class 'music21.base.Music21Object'>
2828
2929
>>> music21.VERSION_STR
30-
'9.6.0b3'
30+
'9.6.0b4'
3131
3232
Alternatively, after doing a complete import, these classes are available
3333
under the module "base":

music21/musicxml/m21ToXml.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6462,11 +6462,15 @@ def pedalTransitionToXml(self, pt: expressions.PedalTransition) -> Element|None:
64626462
64636463
>>> pm = expressions.PedalMark()
64646464
>>> po = expressions.PedalBounce()
6465+
>>> po.overrideBounceUp = expressions.PedalForm.SlantedLine
6466+
>>> po.overrideBounceDown = expressions.PedalForm.SlantedLine
64656467
>>> pm.addSpannedElements(po)
6466-
>>> pm.pedalForm = expressions.PedalForm.Line
64676468
>>> pm.pedalType = expressions.PedalType.Sustain
6469+
>>> pm.startForm = expressions.PedalForm.VerticalLine
6470+
>>> pm.continueLine = expressions.PedalLine.Line
6471+
>>> pm.endForm = expressions.PedalForm.VerticalLine
64686472
>>> MEX = musicxml.m21ToXml.MeasureExporter()
6469-
>>> mxPedal = MEX.pedalObjectToXml(po)
6473+
>>> mxPedal = MEX.pedalTransitionToXml(po)
64706474
>>> MEX.dump(mxPedal)
64716475
<direction>
64726476
<direction-type>
@@ -6476,12 +6480,16 @@ def pedalTransitionToXml(self, pt: expressions.PedalTransition) -> Element|None:
64766480
64776481
>>> pm = expressions.PedalMark()
64786482
>>> po = expressions.PedalGapStart()
6483+
>>> po.overrideBounceUp = expressions.PedalForm.SlantedLine
6484+
>>> po.overrideBounceDown = expressions.PedalForm.SlantedLine
64796485
>>> pm.addSpannedElements(po)
6480-
>>> pm.pedalForm = expressions.PedalForm.Line
64816486
>>> pm.pedalType = expressions.PedalType.Sustain
6487+
>>> pm.startForm = expressions.PedalForm.VerticalLine
6488+
>>> pm.continueLine = expressions.PedalLine.Line
6489+
>>> pm.endForm = expressions.PedalForm.VerticalLine
64826490
>>> po.placement = 'above'
64836491
>>> MEX = musicxml.m21ToXml.MeasureExporter()
6484-
>>> mxPedal = MEX.pedalObjectToXml(po)
6492+
>>> mxPedal = MEX.pedalTransitionToXml(po)
64856493
>>> MEX.dump(mxPedal)
64866494
<direction placement="above">
64876495
<direction-type>
@@ -6492,11 +6500,13 @@ def pedalTransitionToXml(self, pt: expressions.PedalTransition) -> Element|None:
64926500
>>> pm = expressions.PedalMark()
64936501
>>> po = expressions.PedalGapEnd()
64946502
>>> pm.addSpannedElements(po)
6495-
>>> pm.pedalForm = expressions.PedalForm.Line
64966503
>>> pm.pedalType = expressions.PedalType.Sustain
6504+
>>> pm.startForm = expressions.PedalForm.VerticalLine
6505+
>>> pm.continueLine = expressions.PedalLine.Line
6506+
>>> pm.endForm = expressions.PedalForm.VerticalLine
64976507
>>> po.placement = 'below'
64986508
>>> MEX = musicxml.m21ToXml.MeasureExporter()
6499-
>>> mxPedal = MEX.pedalObjectToXml(po)
6509+
>>> mxPedal = MEX.pedalTransitionToXml(po)
65006510
>>> MEX.dump(mxPedal)
65016511
<direction placement="below">
65026512
<direction-type>
@@ -6530,7 +6540,7 @@ def pedalTransitionToXml(self, pt: expressions.PedalTransition) -> Element|None:
65306540
# intention is a "caret" bounce.
65316541
mxPedals = [Element('pedal')]
65326542
mxPedals[0].set('type', 'change')
6533-
mxPedals[0].set('sign', 'yes')
6543+
mxPedals[0].set('line', 'yes')
65346544
else:
65356545
# We assume that bounceUp is either NoMark or Star.
65366546
if bounceUp == expressions.PedalForm.NoMark:

music21/musicxml/test_xmlToM21.py

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,14 +1080,21 @@ def testPedalMarks(self):
10801080
self.assertEqual(len(pedals), 1)
10811081
pm = pedals[0]
10821082
pm.fill(s)
1083-
self.assertIsNone(pm.pedalForm)
10841083
self.assertEqual(pm.pedalType, expressions.PedalType.Sustain)
1084+
self.assertEqual(pm.startForm, expressions.PedalForm.VerticalLine)
1085+
self.assertEqual(pm.continueLine, expressions.PedalLine.Line)
1086+
self.assertEqual(pm.bounceUp, expressions.PedalForm.Unspecified)
1087+
self.assertEqual(pm.bounceDown, expressions.PedalForm.Unspecified)
1088+
self.assertEqual(pm.endForm, expressions.PedalForm.VerticalLine)
1089+
self.assertFalse(pm.abbreviated)
10851090
spElements = pm.getSpannedElements()
10861091
self.assertEqual(len(spElements), 4)
10871092
expectedOffsets = [0., 1., 1., 2.]
10881093
for i, (el, expectedOffset) in enumerate(zip(spElements, expectedOffsets)):
10891094
if i == 1:
10901095
self.assertIsInstance(el, expressions.PedalBounce)
1096+
self.assertEqual(el.overrideBounceUp, expressions.PedalForm.SlantedLine)
1097+
self.assertEqual(el.overrideBounceDown, expressions.PedalForm.SlantedLine)
10911098
else:
10921099
self.assertIsInstance(el, note.Note)
10931100
self.assertEqual(el.fullName, 'C in octave 4 Quarter Note')
@@ -1098,26 +1105,38 @@ def testPedalMarks(self):
10981105
self.assertEqual(len(pedals), 1)
10991106
pm = pedals[0]
11001107
pm.fill(s)
1101-
self.assertIsNone(pm.pedalForm)
11021108
self.assertEqual(pm.pedalType, expressions.PedalType.Sustain)
1109+
self.assertEqual(pm.startForm, expressions.PedalForm.VerticalLine)
1110+
self.assertEqual(pm.continueLine, expressions.PedalLine.Line)
1111+
self.assertEqual(pm.bounceUp, expressions.PedalForm.Unspecified)
1112+
self.assertEqual(pm.bounceDown, expressions.PedalForm.Unspecified)
1113+
self.assertEqual(pm.endForm, expressions.PedalForm.VerticalLine)
1114+
self.assertFalse(pm.abbreviated)
11031115
spElements = pm.getSpannedElements()
11041116
self.assertEqual(len(spElements), 3)
11051117
expectedOffsets = [0., 1., 1.]
11061118
for i, (el, expectedOffset) in enumerate(zip(spElements, expectedOffsets)):
11071119
if i == 1:
11081120
self.assertIsInstance(el, expressions.PedalBounce)
1121+
self.assertEqual(el.overrideBounceUp, expressions.PedalForm.SlantedLine)
1122+
self.assertEqual(el.overrideBounceDown, expressions.PedalForm.SlantedLine)
11091123
else:
11101124
self.assertIsInstance(el, note.Note)
11111125
self.assertEqual(el.fullName, 'B in octave 4 Quarter Note')
11121126
self.assertEqual(el.offset, expectedOffset)
11131127

1114-
s = corpus.parse('beach')
1128+
s = corpus.parse('beach') # , forceSource=True)
11151129
pedals = list(s[expressions.PedalMark])
11161130
self.assertEqual(len(pedals), 1)
11171131
pm = pedals[0]
11181132
pm.fill(s.parts[5])
1119-
self.assertEqual(pm.pedalForm, expressions.PedalForm.Symbol)
11201133
self.assertEqual(pm.pedalType, expressions.PedalType.Sustain)
1134+
self.assertEqual(pm.startForm, expressions.PedalForm.PedalName)
1135+
self.assertEqual(pm.continueLine, expressions.PedalLine.NoLine)
1136+
self.assertEqual(pm.bounceUp, expressions.PedalForm.Unspecified)
1137+
self.assertEqual(pm.bounceDown, expressions.PedalForm.PedalName)
1138+
self.assertEqual(pm.endForm, expressions.PedalForm.Star)
1139+
self.assertFalse(pm.abbreviated)
11211140
spElements = pm.getSpannedElements()
11221141
self.assertEqual(len(spElements), 2)
11231142
self.assertIsInstance(spElements[0], chord.Chord)
@@ -1130,13 +1149,17 @@ def testPedalMarks(self):
11301149
self.assertEqual(spElements[1].fullName, 'E-flat in octave 1 Whole Note')
11311150
self.assertEqual(spElements[1].offset, 0.)
11321151

1133-
s = corpus.parse('dichterliebe_no2')
1152+
s = corpus.parse('dichterliebe_no2') # , forceSource=True)
11341153
pedals = list(s[expressions.PedalMark])
11351154
self.assertEqual(len(pedals), 1)
11361155
pm = pedals[0]
11371156
pm.fill(s.parts[2])
1138-
self.assertEqual(pm.pedalForm, expressions.PedalForm.Symbol)
11391157
self.assertEqual(pm.pedalType, expressions.PedalType.Sustain)
1158+
self.assertEqual(pm.startForm, expressions.PedalForm.PedalName)
1159+
self.assertEqual(pm.continueLine, expressions.PedalLine.NoLine)
1160+
self.assertEqual(pm.bounceUp, expressions.PedalForm.Unspecified)
1161+
self.assertEqual(pm.bounceDown, expressions.PedalForm.PedalName)
1162+
self.assertEqual(pm.endForm, expressions.PedalForm.Star)
11401163
spElements = pm.getSpannedElements()
11411164
self.assertEqual(len(spElements), 5)
11421165
expectedOffsets = [1.5, 1.75, 0., 0.75, 1.0]

music21/musicxml/xmlToM21.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4122,15 +4122,33 @@ def xmlDirectionTypeToSpanners(
41224122
>>> pedalMark = retList[0]
41234123
>>> pedalMark.pedalType
41244124
<PedalType.Sostenuto>
4125-
>>> pedalMark.pedalForm
4126-
<PedalForm.Symbol>
4125+
>>> pedalMark.startForm
4126+
<PedalForm.PedalName>
4127+
>>> pedalMark.continueLine
4128+
<PedalLine.NoLine>
4129+
>>> pedalMark.bounceUp
4130+
<PedalForm.Unspecified>
4131+
>>> pedalMark.bounceDown
4132+
<PedalForm.PedalName>
4133+
>>> pedalMark.endForm
4134+
<PedalForm.Star>
41274135
41284136
>>> mxDirectionType1a = EL('<pedal type="resume" line="yes" number="2"/>')
41294137
>>> retList = MP.xmlDirectionTypeToSpanners(mxDirectionType1a, 1, 0.5)
41304138
>>> retList
41314139
[]
4132-
>>> pedalMark.pedalForm
4133-
<PedalForm.SymbolLine>
4140+
>>> pedalMark.pedalType
4141+
<PedalType.Sostenuto>
4142+
>>> pedalMark.startForm
4143+
<PedalForm.PedalName>
4144+
>>> pedalMark.continueLine
4145+
<PedalLine.Line>
4146+
>>> pedalMark.bounceUp
4147+
<PedalForm.SlantedLine>
4148+
>>> pedalMark.bounceDown
4149+
<PedalForm.SlantedLine>
4150+
>>> pedalMark.endForm
4151+
<PedalForm.VerticalLine>
41344152
41354153
>>> mxDirectionType2 = EL('<pedal type="change" line="yes" number="2"/>')
41364154
>>> retList = MP.xmlDirectionTypeToSpanners(mxDirectionType2, 1, 1.0)
@@ -4309,7 +4327,7 @@ def xmlDirectionTypeToSpanners(
43094327
elif mxLine == 'no' or mxSign == 'yes':
43104328
sp.startForm = expressions.PedalForm.PedalName
43114329
sp.continueLine = expressions.PedalLine.NoLine
4312-
sp.bounceUp = expressions.PedalForm.Star
4330+
sp.bounceUp = expressions.PedalForm.Unspecified
43134331
sp.bounceDown = expressions.PedalForm.PedalName
43144332
sp.endForm = expressions.PedalForm.Star
43154333

@@ -4367,6 +4385,15 @@ def xmlDirectionTypeToSpanners(
43674385
)
43684386
else:
43694387
pb = expressions.PedalBounce()
4388+
# Here, if sp.startForm/continueLine/endForm are all unspecified,
4389+
# we know what it should be, because 'change' only makes sense
4390+
# if line="yes".
4391+
if (sp.startForm == expressions.PedalForm.Unspecified
4392+
and sp.continueLine == expressions.PedalLine.Unspecified
4393+
and sp.endForm == expressions.PedalForm.Unspecified):
4394+
sp.startForm = expressions.PedalForm.VerticalLine
4395+
sp.continueLine = expressions.PedalLine.Line
4396+
sp.endForm = expressions.PedalForm.VerticalLine
43704397
self.insertCoreAndRef(totalOffset, staffKey, pb)
43714398
sp.addSpannedElements(pb)
43724399
elif mxType == 'stop':

0 commit comments

Comments
 (0)