Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 4 additions & 14 deletions music21/common/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,17 @@
import typing as t
import weakref

from music21.common.decorators import deprecated

__all__ = [
'cleanedFlatNotation',
'defaultDeepcopy',
'flattenList',
'getMissingImportStr',
'getPlatform',
'macOSVersion',
'sortModules',
'pitchList',
'unique',
'runningInNotebook',
'defaultDeepcopy',
'cleanedFlatNotation',
'sortModules',
'unique',
]

if t.TYPE_CHECKING:
Expand Down Expand Up @@ -229,14 +227,6 @@ def runningInNotebook() -> bool:
return False


@deprecated('v9', 'v10', 'use runningInNotebook() instead')
def runningUnderIPython() -> bool: # pragma: no cover
'''
DEPRECATED in v9: use runningInNotebook() instead
'''
return runningInNotebook()


# ----------------------------
# match collections, defaultdict()

Expand Down
76 changes: 22 additions & 54 deletions music21/common/numberTools.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,34 @@
import unittest

from music21 import defaults
from music21.common import deprecated
from music21.common.types import OffsetQLIn, OffsetQL

if TYPE_CHECKING:
from decimal import Decimal
from collections.abc import Iterable, Sequence, Collection
from collections.abc import Sequence, Collection


__all__ = [
'ordinals', 'musicOrdinals', 'ordinalsToNumbers',
'numToIntOrFloat',

'opFrac', 'mixedNumeral',
'roundToHalfInteger',
'addFloatPrecision', 'strTrimFloat',
'nearestMultiple',

'dotMultiplier', 'decimalToTuplet',
'unitNormalizeProportion', 'unitBoundaryProportion',
'weightedSelection',
'addFloatPrecision',
'approximateGCD',

'contiguousList',

'decimalToTuplet',
'dotMultiplier',
'fromRoman',
'groupContiguousIntegers',

'fromRoman', 'toRoman',
'mixedNumeral',
'musicOrdinals',
'nearestMultiple',
'numToIntOrFloat',
'opFrac',
'ordinalAbbreviation',
'ordinals',
'ordinalsToNumbers',
'roundToHalfInteger',
'strTrimFloat',
'toRoman',
'unitBoundaryProportion',
'unitNormalizeProportion',
'weightedSelection',
]

ordinals = [
Expand Down Expand Up @@ -855,42 +855,6 @@ def approximateGCD(values: Collection[int|float|Fraction], grain: float = 1e-4)
return max(commonUniqueDivisions)


@deprecated('v9', 'v10', 'Use math.lcm instead')
def lcm(filterList: Iterable[int]) -> int:
'''
Find the least common multiple of a list of values

common.lcm([3, 4, 5])
60
common.lcm([3, 4])
12
common.lcm([1, 2])
2
common.lcm([3, 6])
6

Works with any iterable, like this set

common.lcm({3, 5, 6})
30

Deprecated in v9 since Python 3.10 is the minimum version
and math.lcm works in C and is faster
'''
def _lcm(a, b):
'''
find the least common multiple of a, b
'''
# // forces integer style division (no remainder)
return abs(a * b) // gcd(a, b)

# derived from
# http://www.oreillynet.com/cs/user/view/cs_msg/41022
lcmVal = 1
for flValue in filterList:
lcmVal = _lcm(lcmVal, flValue)
return lcmVal


def contiguousList(inputListOrTuple) -> bool:
'''
Expand Down Expand Up @@ -1125,6 +1089,10 @@ def ordinalAbbreviation(value: int, plural=False) -> str:
ordinalsToNumbers[musicOrdinalNameLower] = ordinal_index

del ordinal_index
del ordinalName
del ordinalNameLower
del musicOrdinalName
del musicOrdinalNameLower


class Test(unittest.TestCase):
Expand Down
80 changes: 26 additions & 54 deletions music21/converter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
from __future__ import annotations

from collections import deque
import copy
from http.client import responses
import io
from math import isclose
Expand Down Expand Up @@ -69,14 +68,26 @@


__all__ = [
'subConverters', 'museScore',
'ArchiveManagerException', 'PickleFilterException',
'ConverterException', 'ConverterFileException',
'ArchiveManager', 'PickleFilter', 'resetSubConverters',
'registerSubConverter', 'unregisterSubConverter',
'Converter', 'parseFile', 'parseData', 'parseURL',
'parse', 'freeze', 'thaw', 'freezeStr', 'thawStr',

'ArchiveManager',
'ArchiveManagerException',
'Converter',
'ConverterException',
'ConverterFileException',
'PickleFilter',
'PickleFilterException',
'freeze',
'freezeStr',
'museScore',
'parse',
'parseData',
'parseFile',
'parseURL',
'registerSubConverter',
'resetSubConverters',
'subConverters',
'thaw',
'thawStr',
'unregisterSubConverter',
]

environLocal = environment.Environment('converter')
Expand Down Expand Up @@ -424,15 +435,6 @@ def registerSubConverter(newSubConverter: type[subConverters.SubConverter]) -> N
'''
_registeredSubConverters.appendleft(newSubConverter)

@common.deprecated('v9', 'v10', 'use unregisterSubconverter with capital C')
def registerSubconverter(
newSubConverter: type[subConverters.SubConverter]
) -> None: # pragma: no cover
'''
Deprecated: use registerSubConverter w/ capital "C" instead.
'''
registerSubConverter(newSubConverter)

def unregisterSubConverter(
removeSubConverter: t.Literal['all']|type[subConverters.SubConverter]
) -> None:
Expand Down Expand Up @@ -487,16 +489,6 @@ def unregisterSubConverter(
f'Could not remove {removeSubConverter!r} from registered subConverters')


@common.deprecated('v9', 'v10', 'use unregisterSubConverter with capital C')
def unregisterSubconverter(
newSubConverter: type[subConverters.SubConverter]
) -> None: # pragma: no cover
'''
Deprecated: use unregisterSubConverter w/ capital "C" instead.
'''
unregisterSubConverter(newSubConverter)


# ------------------------------------------------------------------------------
class Converter:
'''
Expand Down Expand Up @@ -806,13 +798,6 @@ def parseURL(

# -----------------------------------------------------------------------#
# SubConverters
@common.deprecated('v9', 'v10', 'use subConvertersList with capital C')
def subconvertersList(
self,
converterType: t.Literal['any', 'input', 'output'] = 'any'
) -> list[type[subConverters.SubConverter]]: # pragma: no cover
return self.subConvertersList(converterType)

@staticmethod
def subConvertersList(
converterType: t.Literal['any', 'input', 'output'] = 'any'
Expand Down Expand Up @@ -944,10 +929,6 @@ def subConvertersList(

return filteredSubConvertersList

@common.deprecated('v9', 'v10', 'use defaultSubConverters with capital C')
def defaultSubconverters(self) -> list[type[subConverters.SubConverter]]: # pragma: no cover
return self.defaultSubConverters()

@staticmethod
def defaultSubConverters() -> list[type[subConverters.SubConverter]]:
'''
Expand Down Expand Up @@ -992,12 +973,6 @@ def defaultSubConverters() -> list[type[subConverters.SubConverter]]:
defaultSubConverters.append(possibleSubConverter)
return defaultSubConverters

@common.deprecated('v9', 'v10', 'use getSubConverterFormats with capital C')
def getSubconverterFormats(
self
) -> dict[str, type[subConverters.SubConverter]]: # pragma: no cover
return self.getSubConverterFormats()

@staticmethod
def getSubConverterFormats() -> dict[str, type[subConverters.SubConverter]]:
'''
Expand Down Expand Up @@ -1071,10 +1046,6 @@ def getSubConverterFromFormat(
subConverterClass = scf[converterFormat]
return subConverterClass()

@common.deprecated('v9', 'v10', 'use setSubConverterFromFormat with capital C')
def setSubconverterFromFormat(self, converterFormat: str): # pragma: no cover
self.setSubConverterFromFormat(converterFormat)

def setSubConverterFromFormat(self, converterFormat: str):
'''
sets the .subConverter according to the format of `converterFormat`:
Expand Down Expand Up @@ -1749,19 +1720,20 @@ def testConversionMXChords(self):
# print(chords[i].pitches, len(chords[i].pitches))
self.assertEqual(knownSize[i], len(chords[i].pitches))

def testConversionMXBeams(self):
def testConversionMXBeams(self) -> None:
from music21 import beam
from music21 import note
from music21.musicxml import testPrimitive

mxString = testPrimitive.beams01
a = parse(mxString)
a = t.cast(stream.Score, parse(mxString))
part = a.parts[0]
notes = part.recurse().notesAndRests
beams = []
theseBeams: list[beam.Beam] = []
for n in notes:
if isinstance(n, note.Note):
beams += n.beams.beamsList
self.assertEqual(len(beams), 152)
theseBeams += n.beams.beamsList
self.assertEqual(len(theseBeams), 152)

def testConversionMXTime(self):

Expand Down
Loading