From 28bbde58b82980399b4435e4de0704df392dd92f Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Sun, 5 Jul 2026 16:08:40 -0400 Subject: [PATCH] Avoid flipping displayStatus None -> True on explicit naturals --- music21/pitch.py | 1 + music21/test/test_pitch.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/music21/pitch.py b/music21/pitch.py index 2a3c63efe7..3cc56dfe02 100644 --- a/music21/pitch.py +++ b/music21/pitch.py @@ -5145,6 +5145,7 @@ def set_displayStatus(newDisplayStatus: bool) -> None: # and it is not a natural, it should always be set to display if (pPastInMeasure is False and acc is not None + and acc.name != 'natural' and not self._nameInKeySignature(alteredPitches)): acc.displayStatus = True return # do not search past diff --git a/music21/test/test_pitch.py b/music21/test/test_pitch.py index 3e92d0479d..80cfedfe0c 100644 --- a/music21/test/test_pitch.py +++ b/music21/test/test_pitch.py @@ -407,6 +407,18 @@ def testImplicitToExplicitNatural(self): p.makeAccidentals(inPlace=True) self.assertIs(last_note.pitch.accidental.displayStatus, False) + def testExplicitNaturalDisplayStatusNone(self): + p = converter.parse('tinyNotation: d1 d1') + first_note = p.recurse().notes.first() + last_note = p.recurse().notes.last() + first_note.pitch.accidental = pitch.Accidental('natural') + last_note.pitch.accidental = pitch.Accidental('natural') + self.assertIsNone(first_note.pitch.accidental.displayStatus) + self.assertIsNone(last_note.pitch.accidental.displayStatus) + p.makeAccidentals(inPlace=True) + self.assertIs(first_note.pitch.accidental.displayStatus, False) + self.assertIs(last_note.pitch.accidental.displayStatus, False) + def testIfAbsolutelyNecessary(self): ''' Beginning of test cases for if-absolutely-necessary.