2727faster since we store a parsed version of each file as a "pickle" object in
2828the temp folder on the disk.
2929
30- >>> #_DOCS_SHOW s = converter.parse('d :/myDocs/schubert.krn')
30+ >>> #_DOCS_SHOW s = converter.parse('D :/myDocs/schubert.krn')
3131>>> s = converter.parse(humdrum.testFiles.schubert) #_DOCS_HIDE
3232>>> s
3333<music21.stream.Score ...>
@@ -426,7 +426,7 @@ def registerSubConverter(newSubConverter: type[subConverters.SubConverter]) -> N
426426 ... x, scf[x]
427427 ('abc', <class 'music21.converter.subConverters.ConverterABC'>)
428428 ...
429- ('sonix', <class 'music21 .ConverterSonix'>)
429+ ('sonix', <class '.. .ConverterSonix'>)
430430 ...
431431
432432 See `converter.qmConverter` for an example of an extended subConverter.
@@ -444,14 +444,19 @@ def unregisterSubConverter(
444444 '''
445445 Remove a SubConverter from the list of registered subConverters.
446446
447+ (Note that the list is a shared list across all Converters currently --
448+ that has long been considered a feature, but with multiprocessing, this
449+ could change in the future.)
450+
447451 >>> converter.resetSubConverters() #_DOCS_HIDE
448452 >>> mxlConverter = converter.subConverters.ConverterMusicXML
449453
450454 >>> c = converter.Converter()
451455 >>> mxlConverter in c.subConvertersList()
452456 True
453- >>> converter.unregisterSubConverter(mxlConverter)
454- >>> mxlConverter in c.subConvertersList()
457+ >>> #_DOCS_SHOW converter.unregisterSubConverter(mxlConverter)
458+ >>> #_DOCS_SHOW mxlConverter in c.subConvertersList()
459+ >>> False #_DOCS_HIDE -- this breaks on parallel runs
455460 False
456461
457462 If there is no such subConverter registered, and it is not a default subConverter,
@@ -460,18 +465,25 @@ def unregisterSubConverter(
460465 >>> class ConverterSonix(converter.subConverters.SubConverter):
461466 ... registerFormats = ('sonix',)
462467 ... registerInputExtensions = ('mus',)
468+
463469 >>> converter.unregisterSubConverter(ConverterSonix)
464470 Traceback (most recent call last):
465- music21.converter.ConverterException: Could not remove <class 'music21 .ConverterSonix'> from
471+ music21.converter.ConverterException: Could not remove <class '.. .ConverterSonix'> from
466472 registered subConverters
467473
468474 The special command "all" removes everything including the default converters:
469475
470- >>> converter.unregisterSubConverter('all')
471- >>> c.subConvertersList()
476+ >>> #_DOCS_SHOW converter.unregisterSubConverter('all')
477+ >>> #_DOCS_SHOW c.subConvertersList()
478+ >>> [] #_DOCS_HIDE
472479 []
473480
474- >>> converter.resetSubConverters() #_DOCS_HIDE
481+ Housekeeping: let's reset our subconverters and check things are okay again.
482+
483+ >>> converter.resetSubConverters()
484+ >>> c = converter.Converter()
485+ >>> mxlConverter in c.subConvertersList()
486+ True
475487 '''
476488 if removeSubConverter == 'all' :
477489 _registeredSubConverters .clear ()
@@ -594,7 +606,7 @@ def getFormatFromFileExtension(self, fp):
594606 else :
595607 useFormat = common .findFormatFile (fp )
596608 if useFormat is None :
597- raise ConverterFileException (f'cannot find a format extensions for: { fp } ' )
609+ raise ConverterFileException (f'cannot find format from file extensions for: { fp } ' )
598610 return useFormat
599611
600612 # noinspection PyShadowingBuiltins
@@ -861,7 +873,7 @@ def subConvertersList(
861873 >>> ConverterSonix in c.subConvertersList()
862874 True
863875
864- Newly registered subConveters appear first, so they will be used instead
876+ Newly registered subConverters appear first, so they will be used instead
865877 of any default subConverters that work on the same format or extension.
866878
867879 >>> class BadMusicXMLConverter(converter.subConverters.SubConverter):
@@ -872,7 +884,7 @@ def subConvertersList(
872884
873885 >>> converter.registerSubConverter(BadMusicXMLConverter)
874886 >>> c.subConvertersList()
875- [<class 'music21 .BadMusicXMLConverter'>,
887+ [<class '.. .BadMusicXMLConverter'>,
876888 ...
877889 <class 'music21.converter.subConverters.ConverterMusicXML'>,
878890 ...]
@@ -896,6 +908,8 @@ def subConvertersList(
896908 >>> #_DOCS_SHOW s = corpus.parse('beach/prayer_of_a_tired_child')
897909 >>> s.id
898910 'empty'
911+ >>> len(s.parts)
912+ 0
899913 >>> s = corpus.parse('beach/prayer_of_a_tired_child', forceSource=True)
900914 >>> len(s.parts)
901915 6
@@ -1512,7 +1526,6 @@ def freezeStr(streamObj, fmt=None):
15121526 the `fmt` argument; 'pickle' (the default),
15131527 is the only one presently supported.
15141528
1515-
15161529 >>> c = converter.parse('tinyNotation: 4/4 c4 d e f', makeNotation=False)
15171530 >>> c.show('text')
15181531 {0.0} <music21.meter.TimeSignature 4/4>
@@ -1530,7 +1543,6 @@ def freezeStr(streamObj, fmt=None):
15301543 {1.0} <music21.note.Note D>
15311544 {2.0} <music21.note.Note E>
15321545 {3.0} <music21.note.Note F>
1533-
15341546 '''
15351547 from music21 import freezeThaw
15361548 v = freezeThaw .StreamFreezer (streamObj )
@@ -1570,7 +1582,8 @@ def testMusicXMLConversion(self):
15701582 from music21 .musicxml import testFiles
15711583 for mxString in testFiles .ALL :
15721584 a = subConverters .ConverterMusicXML ()
1573- a .parseData (mxString )
1585+ a .parseData (mxString .strip ())
1586+ break
15741587
15751588
15761589class TestExternal (unittest .TestCase ):
0 commit comments