§
    „Øj° ã            	      ó¸  — U d Z ddlmZ ddlZddlZddlZddlZddlZddl	m
Z
 ddl	mZ ddl	mZ ddlmZ ddl	mZ dd	l	mZ dd
l	mZ ddl	mZ ddl	mZ ddl	mZ ddl	mZ ddl	mZ ddl	mZ ddlmZ ddl	mZ ddl	mZ ddl	mZ  ej        d¦  «        ZdZdZ  G d„ dej!        ¦  «        Z" G d„ dej#        ¦  «        Z$ G d„ dej%        ¦  «        Z&d„ Z'dFd%„Z(d&„ Z)i Z*d'e+d(<    G d)„ d*¦  «        Z,dGd+„Z-d,d-d.d/d0d1d2d3d4œZ.	 dGdHd:„Z/d;„ Z0d<„ Z1d=„ Z2dGd>„Z3 G d?„ d@ej4        ¦  «        Z5 G dA„ dBej4        ¦  «        Z6g Z7dCe+dD<   e8dEk    rddl	Z	 e	j9        e6¦  «         dS dS )Iaƒ  
Translation routines for roman numeral analysis text files, as defined
and demonstrated by Dmitri Tymoczko.  Also used for the ClercqTemperley
format which is similar but a little different.

This module is really only needed for people extending the parser,
for others it's simple to get Harmony, RomanNumeral, Key (or KeySignature)
and other objects out of an rntxt file by running this:

>>> monteverdi = corpus.parse('monteverdi/madrigal.3.1.rntxt')
>>> monteverdi.show('text')
{0.0} <music21.metadata.Metadata object at 0x...>
{0.0} <music21.stream.Part ...>
    {0.0} <music21.stream.Measure 1 offset=0.0>
        {0.0} <music21.key.KeySignature of 1 flat>
        {0.0} <music21.meter.TimeSignature 4/4>
        {0.0} <music21.roman.RomanNumeral vi in F major>
        {3.0} <music21.roman.RomanNumeral V[no3] in F major>
    {4.0} <music21.stream.Measure 2 offset=4.0>
        {0.0} <music21.roman.RomanNumeral I in F major>
        {3.0} <music21.roman.RomanNumeral IV in F major>
    ...

Then the stream can be analyzed with something like this, storing
the data to make a histogram of scale degree usage within a key:

>>> degreeDictionary = {}
>>> for el in monteverdi.recurse():
...    if isinstance(el, roman.RomanNumeral):
...         print(f'{el.figure} {el.key}')
...         for p in el.pitches:
...              degree, accidental = el.key.getScaleDegreeAndAccidentalFromPitch(p)
...              if accidental is None:
...                   degreeString = str(degree)
...              else:
...                   degreeString = str(degree) + str(accidental.modifier)
...              if degreeString not in degreeDictionary:
...                   degreeDictionary[degreeString] = 1
...              else:
...                   degreeDictionary[degreeString] += 1
...              degTuple = (str(p), degreeString)
...              print(degTuple)
    vi F major
    ('D5', '6')
    ('F5', '1')
    ('A5', '3')
    V[no3] F major
    ('C5', '5')
    ('G5', '2')
    I F major
    ('F4', '1')
    ('A4', '3')
    ('C5', '5')
    ...
    V6 g minor
    ('F#5', '7#')
    ('A5', '2')
    ('D6', '5')
    i g minor
    ('G4', '1')
    ('B-4', '3')
    ('D5', '5')
    ...

Now if we'd like we can get a Histogram of the data.
It's a little complex, but worth seeing in full:

>>> import operator
>>> histogram = graph.primitives.GraphHistogram()
>>> i = 0
>>> data = []
>>> xLabels = []
>>> values = []
>>> ddList = list(degreeDictionary.items())
>>> for deg,value in sorted(ddList, key=operator.itemgetter(1), reverse=True):
...    data.append((i, degreeDictionary[deg]), )
...    xLabels.append((i+.5, deg), )
...    values.append(degreeDictionary[deg])
...    i += 1
>>> histogram.data = data

These commands give nice labels for the data; optional:

>>> histogram.setIntegerTicksFromData(values, 'y')
>>> histogram.setTicks('x', xLabels)
>>> histogram.setAxisLabel('x', 'ScaleDegree')

Now generate the histogram:

>>> #_DOCS_HIDE histogram.process()

.. image:: images/romanTranslatePitchDistribution.*
    :width: 600

OMIT_FROM_DOCS

>>> x = converter.parse('romantext: m1 a: VI')
>>> [str(p) for p in x[roman.RomanNumeral].first().pitches]
['F5', 'A5', 'C6']

>>> x = converter.parse('romantext: m1 a: vi')
>>> [str(p) for p in x[roman.RomanNumeral].first().pitches]
['F#5', 'A5', 'C#6']

>>> [str(p) for p in
...  converter.parse('romantext: m1 a: vio'
...                  )[roman.RomanNumeral].first().pitches]
['F#5', 'A5', 'C6']
é    )ÚannotationsN)Úbar)Úbase)Úcommon)ÚOffsetQL)Úenvironment)Úexceptions21)Úharmony)Úkey)Úmetadata)Úmeter)Únote)Úrepeat)Úroman)Ú	rtObjects)Úspanner)Ústream)ÚtiezromanText.translateç      ð?Fc                  ó   — e Zd ZdS )ÚRomanTextTranslateExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    ú�/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/romanText/translate.pyr   r   ž   ó   € € € € € Ø€Dr   r   c                  ó   — e Zd ZdS )ÚRomanTextUnprocessedTokenNr   r   r   r   r!   r!   ¢   r   r   r!   c                  ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )ÚRomanTextUnprocessedMetadataÚ c                óV   •—  t          ¦   «         j        di |¤Ž || _        || _        d S )Nr   )ÚsuperÚ__init__ÚtagÚdata)Úselfr(   r)   ÚkeywordsÚ	__class__s       €r   r'   z%RomanTextUnprocessedMetadata.__init__§   s2   ø€ Ø�‰ŒÔÐ$Ð$˜8Ð$Ð$Ð$ØˆŒØˆŒ	ˆ	ˆ	r   ÚreturnÚstrc                ó$   — | j         › d| j        › �S )Nú: )r(   r)   )r*   s    r   Ú_reprInternalz*RomanTextUnprocessedMetadata._reprInternal¬   s   € Ø”(Ð)Ð)˜dœiÐ)Ð)Ð)r   )r$   r$   )r-   r.   )r   r   r   r'   r1   Ú__classcell__)r,   s   @r   r#   r#   ¦   sQ   ø€ € € € € ðð ð ð ð ð ð
*ð *ð *ð *ð *ð *ð *ð *r   r#   c                óx  — d}|                       ¦   «         \  }}t          |¦  «        dk    rt          d¦  «        ‚|d         }|                     t          j        ¦  «        D �]S}|j        |k    �rD	 t          j        |¦  «        }n1# t          $ r$}t          d|j        › d�dz   dz   ¦  «        |‚d}~ww xY w| j        d         |_        |                     t          j        ¦  «        D ]É}	|€t          d	¦  «        ‚|	j        r|	j        }n|	j        �|	j        j        }n||	_        |	j        �…t          j        |	j        t          j        |¦  «        ¦  «        }
d
|
_        t          j        |	j        ¦  «        |
_        t          j        |	j        ¦  «        |
_        |                     |	|
¦  «         ŒÊ n�ŒU||fS )zÓ
    Given a RomanText token, a Part used as the current container,
    and the current Key, return a Measure copied from the past of the Part.

    This is used in cases of definitions such as:
    m23=m21
    Né   zEa single measure cannot define a copy operation for multiple measuresr   úFailed to copy measure ú:zD did you perhaps parse an RTOpus object with romanTextToStreamScore z!instead of romanTextToStreamOpus?úBattempting to copy a measure but no past key definitions are foundT)ÚgetCopyTargetÚlenr   ÚgetElementsByClassr   ÚMeasureÚnumberÚcopyÚdeepcopyÚ	TypeErrorr   ÚRomanNumeralÚfollowsKeyChanger   Ú
pivotChordÚsecondaryRomanNumeralÚfigureÚwriteAsChordÚdurationÚlyricsÚreplace)ÚrtTaggedÚpÚkCurrentÚmÚtargetNumberÚunused_targetRepeatÚtargetÚmPastÚteÚrnPastÚnewRNs              r   Ú_copySingleMeasurerT   °   sø  € ð 	€Að )1×(>Ò(>Ñ(@Ô(@Ñ%€LÐ%Ý
ˆ<ÑÔ˜1ÒÐå)ØSñUô Uð 	Uð ˜!Œ_€FØ×%Ò%¥f¤nÑ5Ô5ð  ñ  ˆØŒ<˜6Ò!Ñ!ðÝ”M %Ñ(Ô(��øÝð ð ð Ý1Ø=¨e¬lÐ=Ð=Ð=Ø\ñ]à9ñ:ñô ð ð	øøøøðøøøð  ” qÔ)ˆAŒHà×.Ò.­uÔ/AÑBÔBð -ð -�ØÐ#å5Ø\ñ^ô ^ð ^àÔ*ð *Ø%œz�H�HØÔ&Ð2Ø%Ô0Ô4�H�Hà!)�F”JØÔ/Ð;Ý!Ô.Øœ¥t¤}°XÑ'>Ô'>ñô �Eð *.�EÔ&Ý%)¤]°6´?Ñ%CÔ%C�E”NÝ#'¤=°´Ñ#?Ô#?�E”LØ—I’I˜f eÑ,Ô,Ð,øàˆEñ? "ð@ ˆhˆ;Ðs   Á3BÂ
B6ÂB1Â1B6Ú	rtMeasureúrtObjects.RTMeasurerJ   ústream.PartrK   úkey.Key | Nonec                ó¼  — |                       ¦   «         \  }}t          |¦  «        dk    rt          d¦  «        ‚|d         }|d         }| j        d         | j        d         z
  ||z
  k    rt          d¦  «        ‚| j        d         |k     rt          d¦  «        ‚g }|                     t
          j        ¦  «        D �]œ}|j        t          ||dz   ¦  «        v �rq	 t          j	        |¦  «        }	n1# t          $ r$}
t          d|j        › d|› d|› d	�¦  «        |
‚d
}
~
ww xY w| j        d         |j        z   |z
  |	_        |                     |	¦  «         t          |	                     t          j        ¦  «        ¦  «        }|D ]É}|€t          d¦  «        ‚|j        r|j        }n|j        �|j        j        }n||_        |j        �…t          j        |j        t          j	        |¦  «        ¦  «        }d|_        t          j	        |j        ¦  «        |_        t          j	        |j        ¦  «        |_        |	                     ||¦  «         ŒÊ|j        |k    r n�Œž||fS )zç
    Given a RomanText token for a RTMeasure, a
    Part used as the current container, and the current Key,
    return a Measure range copied from the past of the Part.

    This is used for cases such as:
    m23-25 = m20-22
    r4   z5a multiple measure range cannot copy a single measurer   zQboth the source and destination sections need to have the same number of measuresz>the source section cannot overlap with the destination sectionr5   z to measure range ú-zf: did you perhaps parse an RTOpus object with romanTextToStreamScore instead of romanTextToStreamOpus?Nr7   T)r8   r9   r   r<   r:   r   r;   Úranger=   r>   r?   ÚappendÚlistr   r@   rA   r   rB   rC   rD   rE   rF   rG   rH   )rU   rJ   rK   ÚtargetNumbersrN   ÚtargetStartÚ	targetEndÚmeasuresrP   rL   rQ   ÚallRNsrR   rS   s                 r   Ú_copyMultipleMeasuresrc   æ   s¶  € ð *3×)@Ò)@Ñ)BÔ)BÑ&€MÐ&Ý
ˆ=ÑÔ˜QÒÐå)Ð*aÑbÔbÐbà Ô"€KØ˜aÔ €IàÔ˜Ô˜YÔ-¨aÔ0Ñ0°IÀÑ4KÒKÐKÝ)Ø_ñaô að 	aàÔ˜Ô˜YÒ&Ð&Ý)ØLñNô Nð 	Nð €HØ×%Ò%¥f¤nÑ5Ô5ð $ñ $ˆØŒ<�5 ¨i¸!©mÑ<Ô<Ð<Ñ<ðÝ”M %Ñ(Ô(��øÝð ð ð Ý1ð-¨e¬lð -ð -Ø"ð-ð -Ø%.ð-ð -ð -ñô ð
 ðøøøøðøøøð !Ô'¨Ô*¨U¬\Ñ9¸KÑGˆAŒHØ�OŠO˜AÑÔÐå˜!×.Ò.­uÔ/AÑBÔBÑCÔCˆFØ ð -ð -�ØÐ#å5Ø\ñ^ô ^ð ^àÔ*ð *Ø%œz�H�HØÔ&Ð2Ø%Ô0Ô4�H�Hà!)�F”JØÔ/Ð;Ý!Ô.Øœ¥t¤}°XÑ'>Ô'>ñô �Eð *.�EÔ&Ý%)¤]°6´?Ñ%CÔ%C�E”NÝ#'¤=°´Ñ#?Ô#?�E”LØ—I’I˜f eÑ,Ô,Ð,øàŒ<˜9Ò$Ð$ØˆEñ %à�XÐÐs   ÃC0Ã0
DÃ:DÄDc                ó  — t          | t          ¦  «        r)t          j        | ¦  «        } t          j        | ¦  «        }n|                      ¦   «         }|j        j        }|j        dk    r| 	                    ¦   «         }|dz   }||fS )aü  
    Given an RTKey specification, return the Key and a string prefix based
    on the tonic:

    >>> romanText.translate._getKeyAndPrefix('c')
    (<music21.key.Key of c minor>, 'c: ')
    >>> romanText.translate._getKeyAndPrefix('F#')
    (<music21.key.Key of F# major>, 'F#: ')
    >>> romanText.translate._getKeyAndPrefix('Eb')
    (<music21.key.Key of E- major>, 'E-: ')
    >>> romanText.translate._getKeyAndPrefix('Bb')
    (<music21.key.Key of B- major>, 'B-: ')
    >>> romanText.translate._getKeyAndPrefix('bb')
    (<music21.key.Key of b- minor>, 'b-: ')
    >>> romanText.translate._getKeyAndPrefix('b#')
    (<music21.key.Key of b# minor>, 'b#: ')
    >>> romanText.translate._getKeyAndPrefix('Bbb')
    (<music21.key.Key of B-- major>, 'B--: ')
    Úminorr0   )
Ú
isinstancer.   r   Ú"convertKeyStringToMusic21KeyStringÚKeyÚgetKeyÚtonicÚnameÚmodeÚlower)ÚrtKeyOrStringÚkÚ	tonicNameÚprefixs       r   Ú_getKeyAndPrefixrr   ,  s�   € õ( �-¥Ñ%Ô%ð #ÝÔ>¸}ÑMÔMˆÝŒG�MÑ"Ô"ˆˆà× Ò Ñ"Ô"ˆØ””€IØ„v�ÒÐØ—O’OÑ%Ô%ˆ	Ø˜Ñ€FØˆfˆ9Ðr   z)dict[tuple[str, str], roman.RomanNumeral]Ú_rnKeyCachec                  ór   — e Zd ZdZd#d„Zd„ Zd$d„Zd%d	„Zd&d„Zd'd„Z	d(d„Z
d%d„Zd„ Zddœd)d„Zd*d!„Zd"„ ZdS )+ÚPartTranslatora  
    A refactoring of the previously massive romanTextToStreamScore function
    to allow for more fine-grained testing (eventually), and to
    get past the absurdly high number of nested blocks (the previous translator
    was written under severe time constraints).
    Nc                ó(  — |€t          j        ¦   «         }|| _        t          j        ¦   «         | _        t          | _        t          j	        d¦  «        | _
        | j
        | _        d| _        d | _        d| _        d | _        d | _        d| _        d| _        t'          d¦  «        \  | _        }d| _        t,          j        j        | _        t,          j        j        | _        i | _        d | _        d | _        d| _        d| _        d| _         d| _!        d S )Nz4/4Fr   TÚCr$   ç        )"r   ÚMetadataÚmdr   ÚPartrJ   ÚROMANTEXT_VERSIONÚromanTextVersionr   ÚTimeSignatureÚ	tsCurrentÚtsAtTimeOfLastChordÚtsSetÚlastMeasureTokenÚlastMeasureNumberÚ
previousRnÚkeySigCurrentÚsetKeySigFromFirstKeyTokenÚfoundAKeySignatureSoFarrr   rK   ÚprefixLyricr   ÚMinor67DefaultÚ
CAUTIONARYÚ
sixthMinorÚseventhMinorÚrepeatEndingsÚcurrentMeasureTokenÚpreviousChordInMeasureÚpivotChordPossibleÚnumberOfAtomsInCurrentMeasureÚsetKeyChangeTokenÚcurrentOffsetInMeasure)r*   rz   Úunused_prefixLyrics      r   r'   zPartTranslator.__init__X  sý   € Øˆ:ÝÔ"Ñ$Ô$ˆBØˆŒÝ”‘”ˆŒå 1ˆÔõ Ô,¨UÑ3Ô3ˆŒØ#'¤>ˆÔ ØˆŒ
Ø $ˆÔØ!"ˆÔØˆŒØ!ˆÔØ*.ˆÔ'Ø',ˆÔ$Ý,<¸SÑ,AÔ,AÑ)ˆŒÐ)ØˆÔåÔ.Ô9ˆŒÝ!Ô0Ô;ˆÔàˆÔð $(ˆÔ Ø&*ˆÔ#Ø"'ˆÔØ-.ˆÔ*Ø!&ˆÔØ&)ˆÔ#Ð#Ð#r   c           
     ó˜  — |D ][}	 |                       |¦  «         Œ# t          $ r6}t          j        ¦   «         }t	          d|j        › d|› d|› �¦  «        |‚d }~ww xY w| j        }|                     ¦   «          t          |¦  «         | 	                    d¬¦  «         | 
                    d¬¦  «         t          || j        ¦  «         |S )NzAt line z for token z, an exception was raised: 
T)ÚinPlace)ÚtranslateOneLineTokenÚ	ExceptionÚ	tracebackÚ
format_excr   Ú
lineNumberrJ   ÚcoreElementsChangedÚfixPickupMeasureÚ	makeBeamsÚmakeAccidentalsÚ_addRepeatsFromRepeatEndingsr�   )r*   ÚtokensÚtokenÚexcÚtracebackMessagerJ   s         r   ÚtranslateTokenszPartTranslator.translateTokensz  s  € Øð 	Oð 	OˆEðOØ×*Ò*¨5Ñ1Ô1Ð1Ð1øÝð Oð Oð OÝ#,Ô#7Ñ#9Ô#9Ð Ý1ðE˜uÔ/ð Eð E¸Eð Eð EØ2BðEð EñFô FàKNðOøøøøðOøøøð ŒFˆØ	×ÒÑÔÐÝ˜ÑÔÐØ	�Š˜DˆÑ!Ô!Ð!Ø	×Ò $ÐÑ'Ô'Ð'Ý$ Q¨Ô(:Ñ;Ô;Ð;Øˆs   †œ
A¦1AÁAÚ	lineTokenúrtObjects.RTTaggedc                óÜ  — | j         }|                     ¦   «         r?t          j        rt	          |t
          j        ¦  «        sJ ‚|                      |¦  «         d
S |                     ¦   «         r| 	                    d|j
        ¦  «         d
S |                     ¦   «         r| 	                    d|j
        ¦  «         d
S |                     ¦   «         r| 	                    d|j
        ¦  «         d
S |                     ¦   «         r| 	                    d|j
        ¦  «         d
S |                     ¦   «         r| 	                    d|j
        ¦  «         d
S |                     ¦   «         r| 	                    d|j
        ¦  «         d
S |                     ¦   «         r| 	                    d|j
        ¦  «         d
S |                     ¦   «         r`	 t%          j        |j
        ¦  «        | _        d| _        d
S # t,          j        $ r& t0                               d|j
        ›�¦  «         Y d
S w xY w|                     ¦   «         r|                      |¦  «         d
S |                     ¦   «         s|                     ¦   «         r|                      |¦  «         d
S |                     ¦   «         rO	 tA          |j
        ¦  «        | _!        d
S # tD          $ r& t0                               d	|j
        ›�¦  «         Y d
S w xY wt	          |t
          j#        ¦  «        r6tI          |j%        |j
        ¦  «        }| j&         '                    |¦  «         d
S tQ          |¦  «        }| j&         '                    |¦  «         d
S )zø
        Translates one line token and set the current settings.

        A token in this case consists of an entire line's worth.
        It might be a token such as 'Title: Neko Funjatta' or
        a composite token such as 'm23 b4 IV6'
        ÚtitleÚalternativeTitleÚcomposerÚmovementNumberÚanalystÚproofreaderFz#Could not parse TimeSignature tag: zCould not parse RTVersion tag: N))rz   Ú	isMeasureÚtÚTYPE_CHECKINGrf   r   Ú	RTMeasureÚtranslateMeasureLineTokenÚisTitleÚaddr)   ÚisWorkÚisPieceÚ
isComposerÚ
isMovementÚ	isAnalystÚisProofreaderÚisTimeSignaturer   r~   r   r�   r	   ÚMusic21ExceptionÚenvironLocalÚwarnÚisKeySignatureÚparseKeySignatureTagÚisSixthMinorÚisSeventhMinorÚsetMinorRootParseÚ	isVersionÚfloatr}   Ú
ValueErrorÚRTTaggedr#   r(   rJ   r\   r!   )r*   r¦   rz   ÚotherMetadataÚunprocesseds        r   r—   z$PartTranslator.translateOneLineTokenŒ  sŒ  € ð ŒWˆð ×ÒÑ Ô ð 5	'ÝŒð BÝ! )­YÔ-@ÑAÔAÐAÐAÐAØ×*Ò*¨9Ñ5Ô5Ð5Ð5Ð5à×ÒÑ Ô ð 0	'Ø�FŠF�7˜IœNÑ+Ô+Ð+Ð+Ð+à×ÒÑÔð -	'Ø�FŠFÐ% y¤~Ñ6Ô6Ð6Ð6Ð6à×ÒÑ Ô ð *	'Ø�FŠFÐ% y¤~Ñ6Ô6Ð6Ð6Ð6à×!Ò!Ñ#Ô#ð '	'Ø�FŠF�:˜yœ~Ñ.Ô.Ð.Ð.Ð.à×!Ò!Ñ#Ô#ð $	'Ø�FŠFÐ# Y¤^Ñ4Ô4Ð4Ð4Ð4à× Ò Ñ"Ô"ð !	'Ø�FŠF�9˜iœnÑ-Ô-Ð-Ð-Ð-à×$Ò$Ñ&Ô&ð 	'Ø�FŠF�= )¤.Ñ1Ô1Ð1Ð1Ð1à×&Ò&Ñ(Ô(ð 	'ð\Ý!&Ô!4°Y´^Ñ!DÔ!D�”Ø"�”
�
�
øÝÔ0ð \ð \ð \Ý×!Ò!Ð"ZÈ	ÌÐ"ZÐ"ZÑ[Ô[Ð[Ð[Ð[Ð[ð\øøøð
 ×%Ò%Ñ'Ô'ð 	'Ø×%Ò% iÑ0Ô0Ð0Ð0Ð0à×#Ò#Ñ%Ô%ð 	'¨×)AÒ)AÑ)CÔ)Cð 	'Ø×"Ò" 9Ñ-Ô-Ð-Ð-Ð-à× Ò Ñ"Ô"ð 	'ðXÝ(-¨i¬nÑ(=Ô(=�Ô%Ð%Ð%øÝð Xð Xð XÝ×!Ò!Ð"VÀIÄNÐ"VÐ"VÑWÔWÐWÐWÐWÐWðXøøøõ ˜	¥9Ô#5Ñ6Ô6ð 	'Ý8¸¼È	ÌÑWÔWˆMØŒF�MŠM˜-Ñ(Ô(Ð(Ð(Ð(õ 4°IÑ>Ô>ˆKØŒF�MŠM˜+Ñ&Ô&Ð&Ð&Ð&s$   Ç%G. Ç.1H#È"H#Ê%K  Ë ,K0Ë/K0rI   c                óÜ  — |j                              ¦   «         }|dk    rt          j        j        }n–|dk    rt          j        j        }n~|dk    rt          j        j        }nf|dv rt          j        j        }nP|dk    r8|                     ¦   «         rt          j        j        }n$t          j        j        }nt          d|›�¦  «        ‚|                     ¦   «         r	|| _
        dS || _        dS )aO  
        Set Roman Numeral parsing standards from a token.

        >>> pt = romanText.translate.PartTranslator()
        >>> pt.sixthMinor
        <Minor67Default.CAUTIONARY: 2>

        >>> tag = romanText.rtObjects.RTTagged('SixthMinor: Flat')
        >>> tag.isSixthMinor()
        True
        >>> pt.setMinorRootParse(tag)
        >>> pt.sixthMinor
        <Minor67Default.FLAT: 4>

        Harmonic sets to FLAT for sixth and SHARP for seventh

        >>> for config in 'flat sharp quality cautionary harmonic'.split():
        ...     tag = romanText.rtObjects.RTTagged('Seventh Minor: ' + config)
        ...     pt.setMinorRootParse(tag)
        ...     print(pt.seventhMinor)
        Minor67Default.FLAT
        Minor67Default.SHARP
        Minor67Default.QUALITY
        Minor67Default.CAUTIONARY
        Minor67Default.SHARP

        >>> tag = romanText.rtObjects.RTTagged('Sixth Minor: harmonic')
        >>> pt.setMinorRootParse(tag)
        >>> print(pt.sixthMinor)
        Minor67Default.FLAT

        Unknown settings raise a `RomanTextTranslateException`

        >>> tag = romanText.rtObjects.RTTagged('Seventh Minor: asdf')
        >>> pt.setMinorRootParse(tag)
        Traceback (most recent call last):
        music21.romanText.translate.RomanTextTranslateException:
            Cannot parse setting vi or vii parsing: 'asdf'
        ÚflatÚsharpÚquality)ÚcourtesyÚ
cautionaryÚharmonicz(Cannot parse setting vi or vii parsing: N)r)   rm   r   r‰   ÚFLATÚSHARPÚQUALITYrŠ   rÂ   r   r‹   rŒ   )r*   rI   ÚtDataÚtEnums       r   rÄ   z PartTranslator.setMinorRootParseÐ  sÿ   € ðP ”×#Ò#Ñ%Ô%ˆØ�FŠ?ˆ?ÝÔ(Ô-ˆEˆEØ�gÒÐÝÔ(Ô.ˆEˆEØ�iÒÐÝÔ(Ô0ˆEˆEØÐ0Ð0Ð0ÝÔ(Ô3ˆEˆEØ�jÒ Ð Ø×$Ò$Ñ&Ô&ð 3ÝÔ,Ô1��åÔ,Ô2��å-ØD¸5ÐDÐDñFô Fð Fð × Ò Ñ"Ô"ð 	&Ø#ˆDŒOˆOˆOà %ˆDÔÐÐr   ÚmeasureLineTokenrV   c                ó  — | j         }|j        d         | j        dz   k    o| j        du}t	          |j        ¦  «        dk    o|j        }t	          |j        ¦  «        dk    }|j        �dS |j        �dS |r|                      |¦  «         |rŒ| 	                    ¦   «          t          ||| j        ¦  «        \  }| _        |                     |¦  «         |j        | _        || _        |                     t          j        ¦  «        }|r|d         | _        dS dS |r˜| 	                    ¦   «          t#          ||| j        ¦  «        \  }| _        |                     |¦  «         |d         j        | _        || _        |d                              t          j        ¦  «        }|r|d         | _        dS dS |                      |¦  «        }|j        j        dk    r|                      |¦  «         |                     |¦  «         dS )z²
        Translate a measure token consisting of a single line such as::

            m21 b3 V b4 C: IV

        Or it might be a variant measure, or a copy instruction.
        r   r4   Néÿÿÿÿ)rJ   r<   rƒ   r„   r9   ÚisCopyDefinitionÚvariantNumberÚvariantLetterÚfillToMeasureTokenrœ   rT   rK   Ú
coreAppendr‚   r:   r   r@   rc   r\   ÚtranslateSingleMeasurerF   ÚquarterLengthÚfillMeasureFromPreviousRn)	r*   r×   rJ   ÚskipsPriorMeasuresÚisSingleMeasureCopyÚisMultipleMeasureCopyrL   Úromansra   s	            r   r³   z(PartTranslator.translateMeasureLineToken  s/  € ð ŒFˆØ/Ô6°qÔ9¸DÔ<RÐUVÑ<VÒVð AØ$(¤O¸4Ð$?ð 	å"Ð#3Ô#:Ñ;Ô;¸qÒ@ð  EØ#3Ô#Dð 	å!$Ð%5Ô%<Ñ!=Ô!=ÀÒ!AÐð
 Ô)Ð5ð ˆFØÔ)Ð5ð ˆFð
 ð 	6Ø×#Ò#Ð$4Ñ5Ô5Ð5ð ð 	Ø×!Ò!Ñ#Ô#Ð#Ý1Ð2BÀAÀtÄ}ÑUÔUÑˆAˆtŒ}Ø�LŠL˜‰OŒOˆOØ%&¤XˆDÔ"Ø$4ˆDÔ!Ø×)Ò)­%Ô*<Ñ=Ô=ˆFØð -Ø"(¨¤*�”��ð-ð -ð #ð 	Ø×!Ò!Ñ#Ô#Ð#Ý&;Ð<LÈaÐQUÔQ^Ñ&_Ô&_Ñ#ˆH�d”mØ�HŠH�XÑÔÐØ%-¨b¤\Ô%8ˆDÔ"Ø$4ˆDÔ!Ø˜b”\×4Ò4µUÔ5GÑHÔHˆFØð -Ø"(¨¤*�”��ð-ð -ð ×+Ò+Ð,<Ñ=Ô=ˆAØŒzÔ'¨1Ò,Ð,Ø×.Ò.¨qÑ1Ô1Ð1Ø�LŠL˜‰OŒOˆOˆOˆOr   ÚmeasureTokenc                óX  — | j         }t          | j        dz   |j        d         ¦  «        D ]b}t	          j        ¦   «         }||_        |                      |¦  «         t          | j        || j	        |¦  «         | 
                    |¦  «         Œc|j        d         dz
  | _        || _        dS )z†
        Create a series of measures which extend the previous RN until the measure number
        implied by `measureToken`.
        r4   r   N)rJ   r[   rƒ   r<   r   r;   rá   Ú appendMeasureToRepeatEndingsDictr‚   r�   rÞ   )r*   ræ   rJ   ÚiÚmFills        r   rÝ   z!PartTranslator.fillToMeasureTokenK  s»   € ð
 ŒFˆÝ�tÔ-°Ñ1°<Ô3FÀqÔ3IÑJÔJð 	 ð 	 ˆAÝ”NÑ$Ô$ˆEØˆEŒLØ×*Ò*¨5Ñ1Ô1Ð1Ý,¨TÔ-BØ-2Ø-1Ô-?ÀñDô Dð Dð �LŠL˜ÑÔÐÐØ!-Ô!4°QÔ!7¸!Ñ!;ˆÔØ ,ˆÔÐÐr   rê   ústream.Measurer-   ÚNonec                ó€  — | j         �¶t          j        | j         ¦  «        }d|_        t          j        | j        j        ¦  «        |_        | j         j        €t          j        d¦  «        | j         _        nd| j         j        _	        t          j        d¦  «        |_        || _         | 
                    |¦  «         d S d S )Nr$   ÚstartÚcontinueÚstop)r„   r=   r>   Úlyricr€   ÚbarDurationrF   r   ÚTieÚtyper\   )r*   rê   ÚnewRns      r   rá   z(PartTranslator.fillMeasureFromPreviousRn\  sž   € ØŒ?Ð&Ý”M $¤/Ñ2Ô2ˆEØˆEŒKå!œ]¨4Ô+CÔ+OÑPÔPˆEŒNØŒÔ"Ð*Ý&)¤g¨gÑ&6Ô&6�”Ô#Ð#à+5�”Ô#Ô(åœ ™œˆEŒIØ#ˆDŒOØ�LŠL˜ÑÔÐÐÐð 'Ð&r   c                óN  — |j         }|dk    rt          j        d¦  «        | _        no|dk    rt          j        d¦  «        | _        nO	 t	          |¦  «        }t          j        |¦  «        | _        n%# t
          $ r}t          d|›�¦  «        |‚d}~ww xY wd| _        d| _        dS )	a¾  
        Parse a key signature tag which has already been determined to
        be a key signature.

        >>> tag = romanText.rtObjects.RTTagged('KeySignature: -4')
        >>> tag.isKeySignature()
        True
        >>> tag.data
        '-4'

        >>> pt = romanText.translate.PartTranslator()
        >>> pt.keySigCurrent is None
        True
        >>> pt.setKeySigFromFirstKeyToken
        True
        >>> pt.foundAKeySignatureSoFar
        False

        >>> pt.parseKeySignatureTag(tag)
        >>> pt.keySigCurrent
        <music21.key.KeySignature of 4 flats>
        >>> pt.setKeySigFromFirstKeyToken
        False
        >>> pt.foundAKeySignatureSoFar
        True

        >>> tag = romanText.rtObjects.RTTagged('KeySignature: xyz')
        >>> pt.parseKeySignatureTag(tag)
        Traceback (most recent call last):
        music21.romanText.translate.RomanTextTranslateException:
            Cannot parse key signature: 'xyz'
        r$   r   ÚBbrÙ   zCannot parse key signature: NFT)	r)   r   ÚKeySignaturer…   ÚintrÇ   r   r†   r‡   )r*   rI   r)   ÚdataValÚves        r   rÁ   z#PartTranslator.parseKeySignatureTagk  sÅ   € ðB Œ}ˆØ�2Š:ˆ:Ý!$Ô!1°!Ñ!4Ô!4ˆDÔÐØ�TŠ\ˆ\Ý!$Ô!1°"Ñ!5Ô!5ˆDÔÐðcÝ˜d™)œ)�Ý%(Ô%5°gÑ%>Ô%>�Ô"Ð"øÝð cð cð cÝ1Ð2YÐQUÐ2YÐ2YÑZÔZÐ`bÐbøøøøðcøøøà*/ˆÔ'à'+ˆÔ$Ð$Ð$s   Á	(A2 Á2
BÁ<BÂBc                ó¶  — || _         t          j        ¦   «         }|j        d         |_        t	          ||| j        ¦  «         |j        d         | _        || _        | j        s| j	        |_
        d| _        | j        s)| j        �"|                     d| j        ¦  «         d| _        d| _        d| _        d| _        t#          |j        ¦  «        | _        d| _        t+          |j        ¦  «        D ]+\  }}|| j        dz
  k    }|                      |||¬¦  «         Œ,| j	        �#| j	        j        j        | j        z
  | j        _        |                     ¦   «          |S )zp
        Given a measureToken, return a `stream.Measure` object with
        the appropriate atoms set.
        r   TNrx   Fr4   ©ÚisLastAtomInMeasure)rŽ   r   r;   r<   rè   r�   rƒ   r‚   r�   r   ÚtimeSignaturer†   r…   Úinsertr“   r�   r�   r9   Úatomsr‘   r’   Ú	enumerateÚtranslateSingleMeasureAtomrò   rà   r„   rœ   )r*   ræ   rL   ré   Úarþ   s         r   rß   z%PartTranslator.translateSingleMeasure›  se  € ð
 $0ˆÔ ÝŒNÑÔˆØÔ& qÔ)ˆŒÝ(¨°q¸$Ô:LÑMÔMÐMØ!-Ô!4°QÔ!7ˆÔØ ,ˆÔàŒzð 	Ø"œnˆAŒOØˆDŒJØÔ.ð 	3°4Ô3EÐ3QØ�HŠH�Q˜Ô*Ñ+Ô+Ð+Ø.2ˆDÔ+à&)ˆÔ#Ø&*ˆÔ#Ø"'ˆÔÝ-0°Ô1CÑ-DÔ-DˆÔ*à!&ˆÔÝ˜lÔ0Ñ1Ô1ð 	[ð 	[‰DˆAˆqØ#$¨Ô(JÈQÑ(NÒ#NÐØ×+Ò+¨A¨qÐFYÐ+ÑZÔZÐZÐZð Œ>Ð%Ø-1¬^Ô-GÔ-UØ26Ô2Mñ.NˆDŒOÔ)à	×ÒÑÔÐØˆr   Frý   r  úrtObjects.RTAtomrL   rþ   Úboolc          	     ó¤  — t          |t          j        ¦  «        s#| j        du rt          |t          j        ¦  «        re|                      |¦  «         |j        dk    r|                     d| j        ¦  «         n |                     | j	        | j        ¦  «         d| _        dS t          |t          j
        ¦  «        rŸ	 |                     ¦   «         }nC# t          j        t          f$ r*}t          d|j        › d| j        j        › �¦  «        |‚d}~ww xY w|j        dk    r|                     d|¦  «         n|                     | j	        |¦  «         d| _        dS t          |t          j        ¦  «        r|                      |¦  «         dS t          |t          j        ¦  «        �r	 |                     | j        ¦  «        }n?# t          $ r2}t          d|j        › d	| j        › d| j        j        › �¦  «        |‚d}~ww xY w| j        €­| j        �¦|dk    r t/          j        | j        ¦  «        }||_        d
|_        | j        j        €t7          j        d¦  «        | j        _        nd| j        j        _        t7          j        d¦  «        |_        || _        || _        |                     d|¦  «         d| _        || _	        dS t          |t          j        ¦  «        rë| j        | _         tC          j"        ¦   «         }|                     | j	        |¦  «         tG          j$        ¦   «         }	| j        du r“| j        €nR| j         %                    |¦  «        }
| j	        |
z
  }|dk    rt          d| j        j        › �¦  «        ‚|| j        _        d
| _&        |                     | j	        |	¦  «         |	| _        |	| _        d| _        dS dS t          |t          j'        ¦  «        r|  (                    ||| j	        ¦  «         dS t          |t          j)        ¦  «        �r‡t          |t          j*        ¦  «        rQ|rOtW          j,        d¬¦  «        |_-        | j        �,| .                    |j-        | j        j/        j        ¦  «         dS dS | j	        dk    rbt          |t          j0        ¦  «        rtW          j,        d¬¦  «        |_1        dS te          |¦  «        }|                     | j	        |¦  «         dS | j        �|| j        j/        j        | j	        k    rbt          |t          j*        ¦  «        rtW          j,        d¬¦  «        |_-        dS te          |¦  «        }|                     | j	        |¦  «         dS te          |¦  «        }|                     | j	        |¦  «         dS te          |¦  «        }|                     | j	        |¦  «         dS )zò
        Translate a single atom in a measure token.

        `a` is the Atom
        `m` is a `stream.Measure` object.

        Uses coreInsert and coreAppend methods, so must have `m.coreElementsChanged()`
        called afterward.
        Fr4   r   Tzcannot get key from ú	 in line Nz-cannot properly get an offset from beat data z under timeSignature r$   rî   rï   rð   ú too many notes in this measure: Úend©Ú	direction)3rf   r   ÚRTKeyr‡   ÚRTAnalyticKeyÚsetAnalyticKeyr<   Ú
coreInsertrK   r“   ÚRTKeySignatureÚgetKeySignaturer	   r½   rÇ   r   ÚsrcrŽ   ÚRTBeatÚ	getOffsetr   r�   r„   r=   r>   rà   rñ   r   ró   rô   r�   Ú	RTNoChordr€   r
   ÚNoChordr   ÚRestÚgetOffsetBySiterˆ   ÚRTChordÚprocessRTChordÚRTRepeatÚRTRepeatStopr   ÚRepeatÚrightBarlineÚsetElementOffsetrò   ÚRTRepeatStartÚleftBarliner!   )r*   r  rL   rþ   ÚthisSigrû   Ú	newOffsetÚ
firstChordÚcsÚrnÚ	oPreviousÚnewQLÚrtts                r   r  z)PartTranslator.translateSingleMeasureAtom¿  sè  € õ  �q�)œ/Ñ*Ô*ð s	;ØÔ0°EÐ9Ð9Ý" 1¥iÔ&=Ñ>Ô>ð :à×Ò Ñ"Ô"Ð"ð Œx˜1Š}ˆ}Ø—’˜Q ¤Ñ.Ô.Ð.Ð.à—’˜TÔ8¸$¼-ÑHÔHÐHØ+/ˆDÔ(Ð(Ð(å˜�9Ô3Ñ4Ô4ð g	;ðØ×+Ò+Ñ-Ô-��øÝ Ô1µ:Ð>ð ð ð Ý1ØY¨1¬5ÐYÐY¸4Ô;SÔ;WÐYÐYñô àðøøøøðøøøð Œx˜1Š}ˆ}Ø—’˜Q Ñ(Ô(Ð(Ð(à—’˜TÔ8¸'ÑBÔBÐBØ+/ˆDÔ(Ð(Ð(å˜�9Ô2Ñ3Ô3ð X	;Ø×Ò Ñ"Ô"Ð"Ð"Ð"å˜�9Ô+Ñ,Ô,ñ U	;ðØŸKšK¨¬Ñ7Ô7�	�	øÝð ð ð Ý1ð>ÀAÄEð >ð >Ø+/¬>ð>ð >à#Ô7Ô;ð>ð >ñô ð ð	øøøøðøøøð Ô+Ð3ØœÐ3Ø! Aš˜å!œ]¨4¬?Ñ;Ô;�
Ø+4�
Ô(Ø#%�
Ô Ø”?Ô&Ð.Ý*-¬'°'Ñ*:Ô*:�D”OÔ'Ð'à/9�D”OÔ'Ô,Ý!$¤¨¡¤�
”Ø",�”Ø.8�Ô+Ø—’˜Q 
Ñ+Ô+Ð+Ø&+ˆDÔ#Ø*3ˆDÔ'Ð'Ð'å˜�9Ô.Ñ/Ô/ð 9	;à'+¤~ˆDÔ$Ý”Ñ"Ô"ˆBØ�LŠL˜Ô4°bÑ9Ô9Ð9å”‘”ˆBØÔ&¨%Ð/Ð/àÔ.Ð6Øà $Ô ;× KÒ KÈAÑ NÔ N�IØ Ô7¸)ÑC�EØ ’z�zÝ9Ø]¸tÔ?WÔ?[Ð]Ð]ñ_ô _ð _à@E�DÔ/Ô=Ø#%�Ô Ø—’˜TÔ8¸"Ñ=Ô=Ð=Ø.0�Ô+Ø"$�”Ø*/�Ô'Ð'Ð'ð 0Ð/õ" ˜�9Ô,Ñ-Ô-ð !	;Ø×Ò  1 dÔ&AÑBÔBÐBÐBÐBÝ˜�9Ô-Ñ.Ô.ñ 	;Ý˜!�YÔ3Ñ4Ô4ð ?Ð9Lð ?õ "%¤°eÐ!<Ñ!<Ô!<�”Ø”>Ð-Ø×&Ò&Øœ¨¬Ô(BÔ(Pñô ð ð ð ð .Ð-ð Ô,°Ò1Ð1Ý˜a¥Ô!8Ñ9Ô9ð CÝ$'¤J¸Ð$AÑ$AÔ$A�A”M�M�Må3°AÑ6Ô6�CØ—L’L Ô!<¸cÑBÔBÐBÐBÐBØ”.Ð,ØœÔ2Ô@ÀDÔD_Ò_Ð_Ý˜a¥Ô!7Ñ8Ô8ð CÝ%(¤Z¸%Ð%@Ñ%@Ô%@�A”N�N�Nå3°AÑ6Ô6�CØ—L’L Ô!<¸cÑBÔBÐBÐBÐBå/°Ñ2Ô2�Ø—’˜TÔ8¸#Ñ>Ô>Ð>Ð>Ð>õ ,¨AÑ.Ô.ˆCØ�LŠL˜Ô4°cÑ:Ô:Ð:Ð:Ð:s0   Â>C ÃDÃ)%DÄDÆ)G Ç
H Ç-G;Ç;H úrtObjects.RTChordÚcurrentOffsetr   c                ó´  — | j         | _        	 |j        }|| j        j        f}t
          r)|t          v r t          j        t          |         ¦  «        }nJt          j
        |t          j        | j        ¦  «        | j        | j        ¬¦  «        }d|_        |t          |<   | j        du rd|_        d| _        nd|_        n(# t          j        $ r t          j
        ¦   «         }Y nw xY w| j        du r«| j        €nM| j                             |¦  «        }||z
  }|dk    rt)          d| j        j        › �¦  «        ‚|| j        _        |                     | j        |j        z   ¦  «         d| _        |                     ||¦  «         || _        || _        d| _        dS | j        xj        d| j        z   |j        z   z  c_        || j        _        d| _        d| _        dS )	z0
        Process a single RTChord atom.
        )r‹   rŒ   TFNr   r	  r$   z//)r   r€   r  rK   ÚtonicPitchNameWithCaseÚUSE_RN_CACHErs   r=   r>   r   r@   r‹   rŒ   rE   r’   rA   ÚRomanNumeralExceptionr�   r�   r  r   rŽ   rà   ÚaddLyricrˆ   r  r„   rñ   rB   )	r*   r  rL   r,  ÚaSrcÚ
cacheTupler'  r(  r)  s	            r   r  zPartTranslator.processRTChordE  s  € ð $(¤>ˆÔ ð2	&Ø”5ˆDð
  ¤Ô DÐEˆJÝð - 
­kÐ 9Ð 9õ ”]¥;¨zÔ#:Ñ;Ô;��õ Ô'¨Ý(,¬°d´mÑ(DÔ(DØ37´?Ø59Ô5Fð*ñ *ô *�ð
 #'�”Ø*,•˜JÑ'ð. Ô%¨Ð-Ð-Ø&*�Ô#Ø).�Ô&Ð&à&+�Ô#øøÝÔ*ð 	&ð 	&ð 	&åÔ#Ñ%Ô%ˆBˆBˆBð	&øøøð Ô" eÐ+Ð+àÔ*Ð2Øà Ô7×GÒGÈÑJÔJ�	Ø%¨	Ñ1�Ø˜A’:�:Ý5ØY¸4Ô;SÔ;WÐYÐYñ[ô [ð [à<A�Ô+Ô9à�KŠK˜Ô(¨1¬5Ñ0Ñ1Ô1Ð1Ø!ˆDÔØ�LŠL˜¨Ñ+Ô+Ð+Ø*,ˆDÔ'Ø ˆDŒOØ&*ˆDÔ#Ð#Ð#àÔ'Ð-Ô-°¸Ô8HÑ1HÈ1Ì5Ñ1PÑPÐ-Ô-Ø57ˆDÔ'Ô2Ø!ˆDÔØ&+ˆDÔ#Ð#Ð#s   ŽB.B= Â="C"Ã!C"c                óì   — 	 t          |¦  «        \  | _        }| xj        |z  c_        nC# t          t          j        f$ r*}t          d|j        › d| j        j        › �¦  «        |‚d}~ww xY wd| _	        dS )zz
        Indicates a change in the analyzed key, not a change in anything
        else, such as the keySignature.
        zcannot get analytic key from r  NT)
rr   rK   rˆ   rÇ   r	   r½   r   r  rŽ   r’   )r*   r  Úplrû   s       r   r  zPartTranslator.setAnalyticKeyœ  s™   € ð
	Ý 0°Ñ 3Ô 3ÑˆDŒM˜2ØÐÔ Ñ"ÐÔÐøÝ�LÔ9Ð:ð 	ð 	ð 	Ý-Ø^°´Ð^Ð^ÀÔ@XÔ@\Ð^Ð^ñô àðøøøøð	øøøð "&ˆÔÐÐs   ‚'* ªA*Á %A%Á%A*©N)r¦   r§   )rI   r§   )r×   rV   )ræ   rV   )rê   rë   r-   rì   )r  r  rL   rë   rþ   r  r-   rì   )r  r+  rL   rë   r,  r   r-   rì   )r   r   r   Ú__doc__r'   r¥   r—   rÄ   r³   rÝ   rá   rÁ   rß   r  r  r  r   r   r   ru   ru   P  s$  € € € € € ðð ð *ð  *ð  *ð  *ðDð ð ð$B'ð B'ð B'ð B'ðH=&ð =&ð =&ð =&ð~:ð :ð :ð :ðx-ð -ð -ð -ð" ð  ð  ð  ð.,ð .,ð .,ð .,ð`"ð "ð "ðR %*ðC;ð C;ð C;ð C;ð C;ð C;ðLU,ð U,ð U,ð U,ðn&ð &ð &ð &ð &r   ru   c                ó†  — t          | t          ¦  «        r)t          j        ¦   «         }|                     | ¦  «        }n| }|€t          j        ¦   «         }n|}t          j        ¦   «         }| 	                    d|¦  «         t          |¦  «        }|                     |j        ¦  «        }| 	                    d|¦  «         |S )z’
    The main processing module for single-movement RomanText works.

    Given a romanText handler or string, return or fill a Score Stream.
    Nr   )rf   r.   r   ÚRTFileÚreadstrr   ÚScorer   ry   r   ru   r¥   r¡   )Ú	rtHandlerÚinputM21ÚrtfÚtokenedRtHandlerÚsrz   Ú	partTransrJ   s           r   ÚromanTextToStreamScorerB  «  s´   € õ �)�SÑ!Ô!ð %ÝÔÑ Ô ˆØŸ;š; yÑ1Ô1ÐÐà$Ðð ÐÝŒL‰NŒNˆˆàˆõ 
Ô	Ñ	Ô	€BØ‡H‚HˆQ��O„O€Oå˜rÑ"Ô"€IØ×!Ò!Ð"2Ô"9Ñ:Ô:€AØ‡H‚HˆQ��N„N€Nà€Hr   r4   é   é   é   é   é   é   é   )r  ÚbÚcÚdÚeÚfÚgÚhÚrtMeasureObjrL   rë   r�   Údictc                ó&  — | j         sdS | j         d         |_        | j         D ]m}|�|dk    rŒ|t          vrt          d|› �¦  «        ‚t          |         }||vrg ||<   |€| j        d         |f}n||f}||                              |¦  «         ŒndS )a¨  
    Takes an RTMeasure object (which might represent one or more
    measures; but currently only one) and a music21 stream.Measure object and
    store it as a tuple in the repeatEndings dictionary to mark where the
    translator should later mark for adding endings.

    If the optional measureNumber is specified, we use that rather than the
    token number to add to the dict.

    This does not yet work for skipped measures.

    >>> rtm = romanText.rtObjects.RTMeasure('m15a V6 b1.5 V6/5 b2 I b3 viio6')
    >>> rtm.repeatLetter
    ['a']
    >>> rtm2 = romanText.rtObjects.RTMeasure('m15b V6 b1.5 V6/5 b2 I')
    >>> rtm2.repeatLetter
    ['b']
    >>> repeatEndings = {}
    >>> m1 = stream.Measure()
    >>> m2 = stream.Measure()
    >>> romanText.translate.appendMeasureToRepeatEndingsDict(rtm, m1, repeatEndings)
    >>> repeatEndings
    {1: [(15, <music21.stream.Measure 0a offset=0.0>)]}
    >>> romanText.translate.appendMeasureToRepeatEndingsDict(rtm2, m2, repeatEndings)
    >>> repeatEndings[1], repeatEndings[2]
    ([(15, <music21.stream.Measure 0a offset=0.0>)],
     [(15, <music21.stream.Measure 0b offset=0.0>)])
    >>> repeatEndings[2][0][1] is m2
    True
    Nr   r$   zImproper repeat letter: )ÚrepeatLetterÚnumberSuffixÚletterToNumDictr   r<   r\   )rQ  rL   r�   ÚmeasureNumberÚrlÚrepeatNumberÚmeasureTuples          r   rè   rè   Í  sÑ   € ðF Ô$ð Øˆà!Ô.¨qÔ1€A„NàÔ'ð 9ð 9ˆØˆ:˜˜rš˜ØØ•_Ð$Ð$Ý-Ð.MÈÐ.MÐ.MÑNÔNÐNÝ& rÔ*ˆØ˜}Ð,Ð,Ø*,ˆM˜,Ñ'ØÐ Ø(Ô/°Ô2°AÐ6ˆLˆLà)¨1Ð-ˆLØ�lÔ#×*Ò*¨<Ñ8Ô8Ð8Ð8ð9ð 9r   c                ó,  — g }| D ]Ž}d}d}g }| |         D ]b\  }}|€|}|}|                      |¦  «         Œ!||dz   k    r!||f}|                      |¦  «         |}|}|g}ŒK|                      |¦  «         |}Œc|�||f}|                      |¦  «         Œ�|S )aB  
    take repeatEndings, which is a dict of integers (repeat ending numbers) each
    holding a list of tuples of measure numbers and measure objects that get this ending,
    and return a list where contiguous endings should appear.  Each element of the list is a
    two-element tuple, where the first element is a list of measure objects that should have
    a bracket and the second element is the repeat number.

    Assumes that the list of measure numbers in each repeatEndings array is sorted.

    For the sake of demo and testing, we will use strings instead of measure objects.

    >>> repeatEndings = {1: [(5, 'm5a'), (6, 'm6a'), (17, 'm17'), (18, 'm18'),
    ...                      (19, 'm19'), (23, 'm23a')],
    ...                  2: [(5, 'm5b'), (6, 'm6b'), (20, 'm20'), (21, 'm21'), (23, 'm23b')],
    ...                  3: [(23, 'm23c')]}
    >>> print(romanText.translate._consolidateRepeatEndings(repeatEndings))
    [(['m5a', 'm6a'], 1), (['m17', 'm18', 'm19'], 1), (['m23a'], 1),
     (['m5b', 'm6b'], 2), (['m20', 'm21'], 2), (['m23b'], 2), (['m23c'], 3)]
    Nr4   )r\   )	r�   Ú
returnListÚendingNumberÚstartMeasureNumberrƒ   ÚmeasureListÚmeasureNumberUnderEndingÚmeasureObjectÚmyTuples	            r   Ú_consolidateRepeatEndingsrc    sø   € ð* €Jà%ð 'ð 'ˆØ!ÐØ ÐØˆØ7DÀ\Ô7Rð 	=ð 	=Ñ3Ð$ mØ!Ð)Ø%=Ð"Ø$<Ð!Ø×"Ò" =Ñ1Ô1Ð1Ð1Ø)Ð,=ÀÑ,AÒAÐAØ&¨Ð5�Ø×!Ò! 'Ñ*Ô*Ð*Ø%=Ð"Ø$<Ð!Ø,˜o��à×"Ò" =Ñ1Ô1Ð1Ø$<Ð!Ð!ØÐ)Ø" LÐ1ˆGØ×Ò˜gÑ&Ô&Ð&øàÐr   c                óB  — t          |¦  «        }|D ]Œ}|d         |d         }}t          j        ||¬¦  «        }|d                              | ¦  «        }|                      ||¦  «         |dk    r-|d         j        € t          j        d¬¦  «        |d         _        Œ�dS )zO
    Given a Stream and the repeatEndings dict, add repeats to the stream.
    r   r4   )r<   rÙ   Nr
  r  )rc  r   ÚRepeatBracketr  r   r  r   r  )r@  r�   ÚconsolidatedRepeatsÚrepeatEndingTupler_  r]  ÚrbÚrbOffsets           r   r    r    4  s¸   € õ 4°MÑBÔBÐØ0ð 
Kð 
KÐØ$5°aÔ$8Ð:KÈAÔ:N�\ˆÝÔ" ;°|ÐDÑDÔDˆØ˜q”>×1Ò1°!Ñ4Ô4ˆð 	
�Š�˜2ÑÔÐà˜1ÒÐØ˜2ŒÔ+Ð3Ý/2¬zÀEÐ/JÑ/JÔ/J�˜B”Ô,øð
Kð 
Kr   c                óú  — |                       d¦  «        }|€dS |                     t          j        t          j        g¦  «        }|sdS |d         j        dk    rdS |d         j        }|D ]}|j        |k     rŒ|j        |z
  |_        Œ||_        | D ]}|j        dk    r|xj        |z  c_        Œ|                      t          j	        ¦  «         
                    ¦   «         }||u rdS |                     t          j        t          j        g¦  «         
                    ¦   «         }|rÓ|j        j        |k    rÅ|j        j        }|j        xj        ||z
  z  c_        ||z
  |_        t          j                             | dd¦  «        5  t#          | ¦  «        }d}	||	         |ur>||	                              | ||	         j        |j        z
  ¦  «         |	dz  }	||	         |u°>ddd¦  «         dS # 1 swxY w Y   dS dS dS )aÚ  
    Fix a pickup measure if any.

    We determine a pickup measure by being measure 0 and not having an RN
    object at the beginning.  Will also pad the last measure right and
    cut the duration of the final chord to match.

    Demonstration: an otherwise incorrect part

    >>> p = stream.Part()
    >>> m0 = stream.Measure()
    >>> m0.number = 0
    >>> k0 = key.Key('G')
    >>> m0.insert(0, k0)
    >>> m0.insert(0, meter.TimeSignature('4/4'))
    >>> m0.insert(3, roman.RomanNumeral('I', k0, quarterLength=1.0))
    >>> m1 = stream.Measure()
    >>> m1.number = 1
    >>> m1.append(roman.RomanNumeral('V', k0, quarterLength=4.0))
    >>> m2 = stream.Measure()
    >>> m2.number = 2
    >>> m2.append(roman.RomanNumeral('I', k0, quarterLength=4.0))
    >>> p.insert(0, m0)
    >>> p.insert(4, m1)
    >>> p.insert(8, m2)

    After running fixPickupMeasure()

    >>> romanText.translate.fixPickupMeasure(p)
    >>> p.show('text')
    {0.0} <music21.stream.Measure 0 offset=0.0>
        {0.0} <music21.key.Key of G major>
        {0.0} <music21.meter.TimeSignature 4/4>
        {0.0} <music21.roman.RomanNumeral I in G major>
    {1.0} <music21.stream.Measure 1 offset=1.0>
        {0.0} <music21.roman.RomanNumeral V in G major>
    {5.0} <music21.stream.Measure 2 offset=5.0>
        {0.0} <music21.roman.RomanNumeral I in G major>

    >>> m0.paddingLeft
    3.0
    >>> m2.paddingRight
    1.0
    >>> m2[roman.RomanNumeral].last().duration
    <music21.duration.Duration 3.0>
    r   NÚautoSortFrÙ   r4   )Úmeasurer:   r   r@   r
   r  ÚoffsetÚpaddingLeftr   r;   ÚlastrF   rà   ÚpaddingRightr   Ú
classToolsÚtempAttributer]   ÚsetOffsetBySite)
Ú
partObjectÚm0Ú	rnObjectsÚleftPaddingÚelÚmLastÚlastRNÚcurLastLengthÚpartElementsré   s
             r   r�   r�   F  sn  € ð` 
×	Ò	˜AÑ	Ô	€BØ	€zØˆØ×%Ò%¥uÔ'9½7¼?Ð&KÑLÔL€IØð ØˆØ�„|Ô˜aÒÐØˆØ˜A”,Ô%€KØð 0ð 0ˆØŒ9�{Ò"Ð"Øàœ	 KÑ/ˆBŒIˆIØ €B„NØð %ð %ˆØŒ9�qŠ=ˆ=ØˆIŒI˜Ñ$ˆIŒIøØ×)Ò)­&¬.Ñ9Ô9×>Ò>Ñ@Ô@€EØ�€{€{Øˆà×%Ò%¥uÔ'9½7¼?Ð&KÑLÔL×QÒQÑSÔS€FØð �&”/Ô/°+Ò=Ð=ØœÔ4ˆØŒÐ%Ô%¨¸Ñ)DÑDÐ%Ô%Ø*¨[Ñ8ˆÔåÔ×,Ò,¨Z¸ÀUÑKÔKð 	ð 	å 
Ñ+Ô+ˆLØˆAØ˜q”/¨Ð.Ð.à˜Q”×/Ò/°
Ø0<¸Q´Ô0FÈÔI[Ñ0[ñ]ô ]ð ]à�Q‘�ð	 ˜q”/¨Ð.Ð.ð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ðð Ð=Ð=s   ÆAG,Ç,G0Ç3G0c                ót  — t          | t          ¦  «        r(t          j        ¦   «         }|                     | ¦  «        } |                      ¦   «         rW|€t          j        ¦   «         }n|}|                      d¬¦  «        }|D ]$}| 	                    t          |¦  «        ¦  «         Œ%|S t          | |¬¦  «        S )a‘  
    The main processing routine for RomanText objects that may or may not
    be multi movement.

    Takes in a romanText.rtObjects.RTFile() object, or a string as rtHandler.

    Runs `romanTextToStreamScore()` as its main work.

    If inputM21 is None then it will create a Score or Opus object.

    Return either a Score object, or, if a multi-movement work is defined, an
    Opus object.
    NT)ÚduplicateHeader)r=  )rf   r.   r   r9  r:  ÚdefinesMovementsr   ÚOpusÚsplitByMovementr\   rB  )r<  r=  r>  r@  ÚhandlerBundlesrP  s         r   ÚromanTextToStreamOpusrƒ  �  s¿   € õ �)�SÑ!Ô!ð +ÝÔÑ Ô ˆØ—K’K 	Ñ*Ô*ˆ	à×!Ò!Ñ#Ô#ð DØÐÝ”‘”ˆAˆAàˆAà"×2Ò2À4Ð2ÑHÔHˆàð 	0ð 	0ˆAð �HŠHÕ+¨AÑ.Ô.Ñ/Ô/Ð/Ð/Øˆå% i¸(ÐCÑCÔCÐCr   c                  ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestSlowz?
    These tests are currently too slow to run every time.
    c                ó¼   — ddl m} |j        D ]M}t          j        ¦   «         }|                     |¦  «        }t          |¦  «        }|                     ¦   «          ŒNd S ©Nr   ©Ú	testFiles)Úmusic21.romanTextr‰  ÚALLr   r9  r:  rB  Úshow©r*   r‰  Útfr>  Úrthr@  s         r   ÚtestExternalAzTestSlow.testExternalAÇ  sh   € Ø/Ð/Ð/Ð/Ð/Ð/à”-ð 	ð 	ˆBÝÔ"Ñ$Ô$ˆCØ—+’+˜b‘/”/ˆCÝ& sÑ+Ô+ˆAØ�FŠF‰HŒHˆHˆHð		ð 	r   c                ót  — ddl m} |j        D ]M}t          j        ¦   «         }|                     |¦  «        }t          |¦  «        }|                     ¦   «          ŒNt          |j	        ¦  «        }|  
                    |j        j        d¦  «         |  
                    |j        j        d¦  «         t          |j        ¦  «        }|  
                    |j        j        d¦  «         |  
                    |j        j        d¦  «         t          |j        ¦  «        }|  
                    |j        j        d¦  «         d S )Nr   rˆ  zHeinrich Schutzz4Warum toben die Heiden, Psalmen Davids no. 2, SWV 23z
J. S. BachzAus meines Herzens GrundezClaudio Monteverdi)rŠ  r‰  r‹  r   r9  r:  rƒ  rŒ  rB  Úswv23ÚassertEqualr   r«   r©   Úriemenschneider001Úmonteverdi_3_13r�  s         r   Ú
testBasicAzTestSlow.testBasicAÑ  s   € Ø/Ð/Ð/Ð/Ð/Ð/à”-ð 	ð 	ˆBÝÔ"Ñ$Ô$ˆCØ—+’+˜b‘/”/ˆCå% cÑ*Ô*ˆAØ�FŠF‰HŒHˆHˆHå" 9¤?Ñ3Ô3ˆØ×Ò˜œÔ,Ð.?Ñ@Ô@Ð@ð 	×Ò˜œÔ)Ð+aÑbÔbÐbå" 9Ô#?Ñ@Ô@ˆØ×Ò˜œÔ,¨lÑ;Ô;Ð;Ø×Ò˜œÔ)Ð+FÑGÔGÐGå" 9Ô#<Ñ=Ô=ˆØ×Ò˜œÔ,Ð.BÑCÔCÐCÐCÐCr   c                óP  — ddl m} t          |j        ¦  «        }|j        d                              t          j        ¦  «        }|d                              t          j	        ¦  «         
                    ¦   «         }|                      d„ |j        D ¦   «         g d¢¦  «         |                      t          |j        ¦  «        d¦  «         |d                              t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |d                              t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |d                              t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |d	                              t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |d	                              t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         t          |j        ¦  «        }|j        d                              t          j        ¦  «        }d }d }d }d }	d }
d }|D ]U}|j        d
k    r|}Œ|j        dk    r|}Œ|j        dk    r|}Œ,|j        dk    r|}	Œ:|j        dk    r|}
ŒH|j        dk    r|}ŒV|                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |	                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |	                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |
                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |
                     t          j	        ¦  «        d         }|                      t          |j        ¦  «        d¦  «         |                     t          j	        ¦  «         
                    ¦   «         }|                      t          |j        ¦  «        d¦  «         |                     t          j	        ¦  «         
                    ¦   «         }|                      t          |j        ¦  «        d¦  «         d S )Nr   rˆ  r4   c                ó,   — g | ]}t          |¦  «        ‘ŒS r   ©r.   )Ú.0Úxs     r   ú
<listcomp>z0TestSlow.testMeasureCopyingA.<locals>.<listcomp>ï  s   € Ð6Ð6Ð6 Q�#˜a™&œ&Ð6Ð6Ð6r   )ÚD5zF#5ÚA5ÚVré   rC  rD  é)   é*   é+   é1   é2   é3   ÚIVÚIÚiizV/ii)rŠ  r‰  rB  r’  Úpartsr:   r   r;   r   r@   Úfirstr“  Úpitchesr.   rD   r•  r<   )r*   r‰  r@  ÚmStreamÚrn1Úrn2Úm1aÚm2aÚm3aÚm1bÚm2bÚm3brL   r'  s                 r   ÚtestMeasureCopyingAzTestSlow.testMeasureCopyingAè  sö  € Ø/Ð/Ð/Ð/Ð/Ð/å" 9¤?Ñ3Ô3ˆØ”'˜!”*×/Ò/µ´Ñ?Ô?ˆà�aŒj×+Ò+­EÔ,>Ñ?Ô?×EÒEÑGÔGˆØ×ÒÐ6Ð6¨#¬+Ð6Ñ6Ô6Ð8KÐ8KÐ8KÑLÔLÐLØ×Ò�˜SœZ™œ¨#Ñ.Ô.Ð.Ø�aŒj×+Ò+­EÔ,>Ñ?Ô?ÀÔBˆØ×Ò�˜SœZ™œ¨#Ñ.Ô.Ð.ð �aŒj×+Ò+­EÔ,>Ñ?Ô?ÀÔBˆØ×Ò�˜SœZ™œ¨#Ñ.Ô.Ð.Ø�aŒj×+Ò+­EÔ,>Ñ?Ô?ÀÔBˆØ×Ò�˜SœZ™œ¨#Ñ.Ô.Ð.à�aŒj×+Ò+­EÔ,>Ñ?Ô?ÀÔBˆØ×Ò�˜SœZ™œ¨#Ñ.Ô.Ð.Ø�aŒj×+Ò+­EÔ,>Ñ?Ô?ÀÔBˆØ×Ò�˜SœZ™œ¨#Ñ.Ô.Ð.õ # 9Ô#<Ñ=Ô=ˆØ”'˜!”*×/Ò/µ´Ñ?Ô?ˆàˆØˆØˆØˆØˆØˆàð 	ð 	ˆAØŒx˜2Š~ˆ~Ø��Ø”˜R’�Ø��Ø”˜R’�Ø��Ø”˜R’�Ø��Ø”˜R’�Ø��Ø”˜R’�Ø�øà×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ.Ô.Ð.Ø×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ-Ô-Ð-à×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ.Ô.Ð.Ø×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ-Ô-Ð-à×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ-Ô-Ð-Ø×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ.Ô.Ð.à×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ-Ô-Ð-Ø×#Ò#¥EÔ$6Ñ7Ô7¸Ô:ˆØ×Ò�˜RœY™œ¨Ñ.Ô.Ð.à×#Ò#¥EÔ$6Ñ7Ô7×=Ò=Ñ?Ô?ˆØ×Ò�˜RœY™œ¨Ñ0Ô0Ð0Ø×#Ò#¥EÔ$6Ñ7Ô7×=Ò=Ñ?Ô?ˆØ×Ò�˜RœY™œ¨Ñ0Ô0Ð0Ð0Ð0r   c                ó|  — ddl m} ddlm} |                     |j        ¦  «        }|                     d¦  «        }|                     ¦   «                              t          j
        ¦  «        }|                      |d         j        d¦  «         |                      t          |d         j        ¦  «        d¦  «         d S )Nr   ©Ú	converterrˆ  é   r4   ÚIIIzd minor)Úmusic21r¸  rŠ  r‰  Úparser•  rl  Úflattenr:   r   r@   r“  rD   r.   r   )r*   r¸  r‰  r@  Úm25r'  s         r   ÚtestMeasureCopyingBzTestSlow.testMeasureCopyingB1  s«   € Ø%Ð%Ð%Ð%Ð%Ð%Ø/Ð/Ð/Ð/Ð/Ð/Ø�OŠO˜IÔ5Ñ6Ô6ˆØ�iŠi˜‰mŒmˆØ�[Š[‰]Œ]×-Ò-­eÔ.@ÑAÔAˆØ×Ò˜˜Aœœ uÑ-Ô-Ð-Ø×Ò�˜R œUœY™œ¨Ñ3Ô3Ð3Ð3Ð3r   c                ó”  — ddl m} t          |j        ¦  «        }|                      |j        d         j        j        d¦  «         |                      |j        d         j        j        d¦  «         |                      |j        d         j        j        d¦  «         |                      |j        d         j        j        d¦  «         |                      |j        d         j        j        d¦  «         |                      |j        d         j        j        d¦  «         dd	l	m
} |                     |j        ¦  «        }|                      d
|j        v ¦  «         |                      t          |j        ¦  «        d¦  «         |                     |j        ¦  «        }|                      t!          |t"          j        ¦  «        ¦  «         d S )Nr   rˆ  Ú1ÚMozartr4   Ú2rC  Ú3r·  r€  rD  )rŠ  r‰  rƒ  Ú
mozartK279r“  Úscoresr   r¬   r«   r»  r¸  r¼  Ú
assertTrueÚclassesr9   r”  rf   r   r;  )r*   r‰  Úor¸  r@  s        r   ÚtestOpuszTestSlow.testOpus@  s‰  € Ø/Ð/Ð/Ð/Ð/Ð/å! )Ô"6Ñ7Ô7ˆØ×Ò˜œ !œÔ-Ô<¸cÑBÔBÐBØ×Ò˜œ !œÔ-Ô6¸ÑAÔAÐAØ×Ò˜œ !œÔ-Ô<¸cÑBÔBÐBØ×Ò˜œ !œÔ-Ô6¸ÑAÔAÐAØ×Ò˜œ !œÔ-Ô<¸cÑBÔBÐBØ×Ò˜œ !œÔ-Ô6¸ÑAÔAÐAð 	&Ð%Ð%Ð%Ð%Ð%Ø�OŠO˜IÔ0Ñ1Ô1ˆØ�Š˜ !¤)Ð+Ñ,Ô,Ð,Ø×Ò�˜QœX™œ¨Ñ*Ô*Ð*ð �OŠO˜IÔ8Ñ9Ô9ˆØ�Š�
 1¥f¤lÑ3Ô3Ñ4Ô4Ð4Ð4Ð4r   N)	r   r   r   r7  r�  r–  rµ  r¿  rÊ  r   r   r   r…  r…  Ã  sp   € € € € € ðð ðð ð ðDð Dð Dð.G1ð G1ð G1ðR4ð 4ð 4ð5ð 5ð 5ð 5ð 5r   r…  c                  ó~   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„ZdS )ÚTestc                ó  ‡ ‡— ddl m} t          |j        ¦  «        }t	          |t
          j                 ¦  «        Šˆˆ fd„} |dd¦  «          |dd¦  «          |dd¦  «          |d	d
¦  «          |dd¦  «          |dd¦  «         d S )Nr   rˆ  c                óŒ   •— ‰|          }|j         }‰                     d                     d„ |D ¦   «         ¦  «        |¦  «         d S )Nú c              3  ó$   K  — | ]}|j         V — Œd S r6  )rk   ©rš  rJ   s     r   ú	<genexpr>z:Test.testMinor67set.<locals>.pitchEqual.<locals>.<genexpr>_  s$   è è € Ð%@Ð%@° a¤fÐ%@Ð%@Ð%@Ð%@Ð%@Ð%@r   )r«  r“  Újoin)ÚindexÚpitchStrÚchÚ	chPitchesÚchordsr*   s       €€r   Ú
pitchEqualz'Test.testMinor67set.<locals>.pitchEqual\  sJ   ø€ Ø˜”ˆBØœ
ˆIØ×Ò˜SŸXšXÐ%@Ð%@°iÐ%@Ñ%@Ô%@Ñ@Ô@À(ÑKÔKÐKÐKÐKr   zC E- Gr4   zB D FrD  zG B DrE  zA- C E-rH  zB- D Fé
   zA C E)rŠ  r‰  rB  ÚtestSetMinorRootParser]   r   r@   )r*   r‰  r@  rÙ  rØ  s   `   @r   ÚtestMinor67setzTest.testMinor67setW  sÓ   øø€ Ø/Ð/Ð/Ð/Ð/Ð/Ý" 9Ô#BÑCÔCˆÝ�a�Ô*Ô+Ñ,Ô,ˆð	Lð 	Lð 	Lð 	Lð 	Lð 	Lð
 	ˆ
�1�hÑÔÐØˆ
�1�gÑÔÐØˆ
�1�gÑÔÐØˆ
�1�iÑ Ô Ð Øˆ
�1�hÑÔÐØˆ
�2�wÑÔÐÐÐr   c                ó  — ddl m} d}|                     |d¬¦  «        }|                     d¦  «                             ¦   «         }|                      |                     t          j        ¦  «         	                    ¦   «         j
        j        d¦  «         |                     d¦  «                             ¦   «         }|                      |                     t          j        ¦  «         	                    ¦   «         j
        j        d¦  «         d S )	Nr   r·  z6
m1 G: I
m2 I
m3 V D: I
m4 V
m5 G: I
m6-7 = m3-4
m8 I
Ú	romanText©ÚformatrH  úD majorrI  ©r»  r¸  r¼  rl  r½  r“  r:   r   r@   rª  r   rk   ©r*   r¸  ÚtestCaser@  rL   s        r   ÚtestPivotInCopyMultiplezTest.testPivotInCopyMultipleh  sâ   € Ø%Ð%Ð%Ð%Ð%Ð%ðˆð �OŠO˜H¨[ˆOÑ9Ô9ˆØ�IŠI�a‰LŒL× Ò Ñ"Ô"ˆØ×Ò˜×-Ò-­eÔ.@ÑAÔA×GÒGÑIÔIÔMÔRÐT]Ñ^Ô^Ð^Ø�IŠI�a‰LŒL× Ò Ñ"Ô"ˆØ×Ò˜×-Ò-­eÔ.@ÑAÔA×GÒGÑIÔIÔMÔRÐT]Ñ^Ô^Ð^Ð^Ð^r   c                ó0  — ddl m} d}|                     |d¬¦  «        }|                     d¦  «                             ¦   «         }|                      |                     t          j        ¦  «         	                    ¦   «         j
        j        d¦  «         dS )	z^
        test whether a chord in a pivot situation outside of copying affects copying
        r   r·  z7
m1 G: I
m2 V D: I
m3 G: IV
m4 V
m5 I
m6-7 = m4-5
m8 I
rÞ  rß  rF  zG majorNrâ  rã  s        r   ÚtestPivotInCopyMultiple2zTest.testPivotInCopyMultiple2y  s�   € ð
 	&Ð%Ð%Ð%Ð%Ð%ðˆð �OŠO˜H¨[ˆOÑ9Ô9ˆØ�IŠI�a‰LŒL× Ò Ñ"Ô"ˆØ×Ò˜×-Ò-­eÔ.@ÑAÔA×GÒGÑIÔIÔMÔRÐT]Ñ^Ô^Ð^Ð^Ð^r   c                ó0  — ddl m} d}|                     |d¬¦  «        }|                     d¦  «                             ¦   «         }|                      |                     t          j        ¦  «         	                    ¦   «         j
        j        d¦  «         d S )Nr   r·  z-
m1 G: I
m2 I
m3 V D: I
m4 G: I
m5 = m3
m6 I
rÞ  rß  rG  rá  râ  rã  s        r   ÚtestPivotInCopySinglezTest.testPivotInCopySingleŒ  s�   € Ø%Ð%Ð%Ð%Ð%Ð%ðˆð �OŠO˜H¨[ˆOÑ9Ô9ˆØ�IŠI�a‰LŒL× Ò Ñ"Ô"ˆØ×Ò˜×-Ò-­eÔ.@ÑAÔA×GÒGÑIÔIÔMÔRÐT]Ñ^Ô^Ð^Ð^Ð^r   c                óì  — d}t          |¦  «        }|                     d¦  «                             ¦   «         }|                      |                     t
          j        ¦  «                             ¦   «         j        d¦  «         |                     d¦  «                             ¦   «         }|                      |                     t
          j        ¦  «                             ¦   «         j        d¦  «         dS )z5
        test secondary dominants after copy
        zG
Time Signature: 4/4
m1 g: i
m2 i6
m3 V7/v
m4 d: i
m5-6 = m2-3
m7 = m3
rG  zE-dominant seventh chordrH  N)	rB  rl  r½  r“  r:   r   r@   rª  ÚpitchedCommonName)r*   ÚtestSecondaryInCopyr@  rL   s       r   ÚtestSecondaryInCopyMultiplez Test.testSecondaryInCopyMultipleš  sÔ   € ð
Ðõ #Ð#6Ñ7Ô7ˆØ�IŠI�a‰LŒL× Ò Ñ"Ô"ˆØ×Ò˜×-Ò-­eÔ.@ÑAÔA×GÒGÑIÔIÔ[Ø3ñ	5ô 	5ð 	5à�IŠI�a‰LŒL× Ò Ñ"Ô"ˆØ×Ò˜×-Ò-­eÔ.@ÑAÔA×GÒGÑIÔIÔ[Ø3ñ	5ô 	5ð 	5ð 	5ð 	5r   c                ó:   — ddl m} t          |j        ¦  «        }d S r‡  )rŠ  r‰  rB  r”  )r*   r‰  Úunused_ss      r   Ú
testBasicBzTest.testBasicB²  s(   € Ø/Ð/Ð/Ð/Ð/Ð/å)¨)Ô*FÑGÔGˆˆˆr   c                ó¼  — ddl m} |                     dd¬¦  «        }|                     ¦   «                              t
          j        ¦  «                             ¦   «         }|                      |d         j	        d¦  «         |                      |d         j	        d¦  «         |                      |d	         j	        d¦  «         |                      |d
         j	        d¦  «         |                      |d         j	        d¦  «         |                      |d         j	        d¦  «         |                      |d         j	        d¦  «         |                      |d         j	        d¦  «         |                     ¦   «                              t          j        ¦  «        }|                      |d         j        d¦  «         |                      |d         j        d¦  «         d S )Nr   r·  zDm1 KS1 I 
 m2 V6/5 
 m3 I b3 V7 
m4 KS-3 vi 
 m5 a: i b3 V4/2 
 m6 IÚ	romantextrß  r§  r4   zV6/5rC  rD  ÚV7rE  ÚvirF  ré   rG  zV4/2rH  éýÿÿÿ)r»  r¸  r¼  r½  r:   r   r@   r   r“  rD   r   rø   Úsharps)r*   r¸  r@  ÚrnStreamÚrnStreamKeys        r   ÚtestRomanTextStringzTest.testRomanTextString¸  s§  € Ø%Ð%Ð%Ð%Ð%Ð%Ø�OŠOð Fà#.ð ñ 0ô 0ˆð —9’9‘;”;×1Ò1µ%Ô2DÑEÔE×LÒLÑNÔNˆØ×Ò˜ !œÔ+¨SÑ1Ô1Ð1Ø×Ò˜ !œÔ+¨VÑ4Ô4Ð4Ø×Ò˜ !œÔ+¨SÑ1Ô1Ð1Ø×Ò˜ !œÔ+¨TÑ2Ô2Ð2Ø×Ò˜ !œÔ+¨TÑ2Ô2Ð2Ø×Ò˜ !œÔ+¨SÑ1Ô1Ð1Ø×Ò˜ !œÔ+¨VÑ4Ô4Ð4Ø×Ò˜ !œÔ+¨SÑ1Ô1Ð1à—i’i‘k”k×4Ò4µSÔ5EÑFÔFˆØ×Ò˜ QœÔ.°Ñ2Ô2Ð2Ø×Ò˜ QœÔ.°Ñ3Ô3Ð3Ð3Ð3r   c           	     ó<  — ddl m} ddl m} d}|                     |d¬¦  «        }|                     ¦   «                              t          j        ¦  «        }dD �]A}|                      ||dz            j	        d	¦  «         |                      t          d
„ ||dz            j        D ¦   «         ¦  «        d¦  «         ||dz            j        d         j        }|€|                     d¦  «        }|                      |j        d¦  «         |                      ||dz            j	        d¦  «         |                      t          d„ ||dz            j        D ¦   «         ¦  «        d¦  «         |                      ||dz            j        d         j        j        ¦  «         �ŒCd S )Nr   r·  )Úpitchz`m1 G: IV || b3 d: III b4 ii
m2 v b2 III6 b3 iv6 b4 ii/o6/5
m3 i6/4 b3 V
m4-5 = m2-3
m6-7 = m4-5
rò  rß  )r   rG  é   rE  ÚIII6c                ó,   — g | ]}t          |¦  «        ‘ŒS r   r™  rÑ  s     r   rœ  z,Test.testMeasureCopyingB.<locals>.<listcomp>Ý  ó   € Ð!VÐ!VÐ!V¨Q¥# a¡&¤&Ð!VÐ!VÐ!Vr   z['A4', 'C5', 'F5']rC  ÚnaturalrF  Úiv6c                ó,   — g | ]}t          |¦  «        ‘ŒS r   r™  rÑ  s     r   rœ  z,Test.testMeasureCopyingB.<locals>.<listcomp>æ  rÿ  r   z['B-4', 'D5', 'G5'])r»  r¸  rû  r¼  r½  r:   r   r@   r“  rD   r.   r«  Ú
accidentalÚ
AccidentalÚalterrÇ  ÚdisplayStatus)r*   r¸  rû  r  r@  r÷  ÚelementNumberr›  s           r   r¿  zTest.testMeasureCopyingBÎ  sÂ  € Ø%Ð%Ð%Ð%Ð%Ð%Ø!Ð!Ð!Ð!Ð!Ð!ðˆð �OŠO˜C¨ˆOÑ4Ô4ˆØ—9’9‘;”;×1Ò1µ%Ô2DÑEÔEˆà'ð 	]ñ 	]ˆMØ×Ò˜X m°aÑ&7Ô8Ô?ÀÑHÔHÐHØ×Ò�SÐ!VÐ!V°(¸=È1Ñ;LÔ2MÔ2UÐ!VÑ!VÔ!VÑWÔWØ1ñ3ô 3ð 3ð ˜¨Ñ*Ô+Ô3°AÔ6ÔAˆAØˆyØ×$Ò$ YÑ/Ô/�Ø×Ò˜QœW aÑ(Ô(Ð(à×Ò˜X m°aÑ&7Ô8Ô?ÀÑGÔGÐGØ×Ò�SÐ!VÐ!V°(¸=È1Ñ;LÔ2MÔ2UÐ!VÑ!VÔ!VÑWÔWØ2ñ4ô 4ð 4ð �OŠO˜H ]°QÑ%6Ô7Ô?ÀÔBÔMÔ[Ñ\Ô\Ð\Ñ\ð	]ð 	]r   c                ó  — ddl m} ddlm} d}|                     |d¬¦  «        }|j        d         }|                     t          j        ¦  «         	                    ¦   «         }|j
        d         }|                      d|j        ¦  «         |                      |j        d	¦  «         |                     t          j        ¦  «                             ¦   «         }|                      ||¦  «         |                     t          j        ¦  «        d
         }	|	j
        d         }
|                      d|
j        ¦  «         |                      |j        d	¦  «         |	j
        d
         }|                      t&          j        |j        ¦  «         d S )Nr   r·  )r  zGm1 G: IV || b3 d: III b4 NC
m2 b2 III6 b3 iv6 b4 ii/o6/5
m3 NC b3 G: V
rò  rß  rÙ   r  r   r4   )r»  r¸  Úmusic21.harmonyr  r¼  r©  r:   r   r;   rª  ÚnotesAndRestsÚassertInrÈ  r“  rà   r
   ÚHarmonyro  ÚassertIsInstancer   r@   ÚclassSet)r*   r¸  r  r  r@  rJ   Úm1Úr1Ú
noChordObjÚm2Úr2r­  s               r   ÚtestNoChordzTest.testNoChordë  se  € Ø%Ð%Ð%Ð%Ð%Ð%Ø+Ð+Ð+Ð+Ð+Ð+ðˆð �OŠO˜C¨ˆOÑ4Ô4ˆØŒG�AŒJˆØ×!Ò!¥&¤.Ñ1Ô1×7Ò7Ñ9Ô9ˆØÔ˜bÔ!ˆØ�Š�f˜bœjÑ)Ô)Ð)Ø×Ò˜Ô)¨3Ñ/Ô/Ð/Ø×*Ò*­7¬?Ñ;Ô;×@Ò@ÑBÔBˆ
Ø×Ò˜j¨'Ñ2Ô2Ð2à×!Ò!¥&¤.Ñ1Ô1°!Ô4ˆØÔ˜aÔ ˆØ�Š�f˜bœjÑ)Ô)Ð)Ø×Ò˜Ô)¨3Ñ/Ô/Ð/ØÔ˜qÔ!ˆØ�Š•eÔ(¨#¬,Ñ7Ô7Ð7Ð7Ð7r   c                ó  — ddl m} ddlm} d}|                     |d¬¦  «        }|j        d         }||j                 }|                      t          |¦  «        d¦  «         |\  }}}	|                      |j	        d¦  «         |                      |	j	        d¦  «         |                      |j
        d	¦  «         |                      |	j
        d
¦  «         |                      |j	        ¦  «         |                      d|j
        ¦  «         d S )Nr   r·  ©Ú	translatez9Note: Hello
m1 G: IV || b3 d: III b4 NC
varM1 I
Note: Hi
rò  rß  rD  ÚNoteÚHelloÚHiz I)r»  r¸  rŠ  r  r¼  r©  r#   r“  r9   r(   r)   ÚassertFalser  )
r*   r¸  r  r  r@  rJ   ÚunprocessedElementsÚnote1Úvar1Únote2s
             r   ÚtestUnprocessedzTest.testUnprocessed  s  € Ø%Ð%Ð%Ð%Ð%Ð%Ø/Ð/Ð/Ð/Ð/Ð/ðˆð
 �OŠO˜C¨ˆOÑ4Ô4ˆØŒG�AŒJˆØ 	Ô FÔGÐØ×Ò�Ð0Ñ1Ô1°1Ñ5Ô5Ð5Ø0Ñˆˆt�UØ×Ò˜œ FÑ+Ô+Ð+Ø×Ò˜œ FÑ+Ô+Ð+Ø×Ò˜œ WÑ-Ô-Ð-Ø×Ò˜œ TÑ*Ô*Ð*Ø×Ò˜œÑ"Ô"Ð"Ø�Š�d˜DœIÑ&Ô&Ð&Ð&Ð&r   c                óh  — ddl m} d}|                     |¦  «        }|j        d         }|                      t          |¦  «        d¦  «         |                      |d         t          j        ¦  «         |                      |d         j	        d¦  «         |                      |d         |j
        ¦  «         |                      |d         j        d¦  «         |                      |d         j        d¦  «         |                      |d	         t          j        ¦  «         |                      |d	         j        d
¦  «         |                      |d	         d         t          j        ¦  «         |                      |d	         j        d
¦  «         |                      |d	         j        j        d¦  «         d S )Nr   r  zx
        Time Signature: 4/4
        m0 b4 f: i
        Note: Internal Note field after anacrusis.
        m1 V
        rD  ç      @r4   rx   z$Internal Note field after anacrusis.rC  r   )rŠ  r  rB  r©  r“  r9   r  r   r;   rn  r#   rm  r)   r   r@   rp  rF   rà   )r*   r  r  r@  rJ   s        r   ÚtestUnprocessedWithAnacrusisz!Test.testUnprocessedWithAnacrusis  s�  € Ø/Ð/Ð/Ð/Ð/Ð/ðˆð ×,Ò,¨SÑ1Ô1ˆØŒG�AŒJˆØ×Ò�˜Q™œ Ñ#Ô#Ð#Ø×Ò˜a œd¥F¤NÑ3Ô3Ð3Ø×Ò˜˜1œÔ)¨3Ñ/Ô/Ð/Ø×Ò˜a œd IÔ$JÑKÔKÐKØ×Ò˜˜1œœ cÑ*Ô*Ð*Ø×Ò˜˜1œœÐ$JÑKÔKÐKØ×Ò˜a œd¥F¤NÑ3Ô3Ð3Ø×Ò˜˜1œœ cÑ*Ô*Ð*Ø×Ò˜a œd 1œg¥uÔ'9Ñ:Ô:Ð:Ø×Ò˜˜1œÔ*¨CÑ0Ô0Ð0Ø×Ò˜˜1œœÔ4°cÑ:Ô:Ð:Ð:Ð:r   c                óö   — ddl m} d}|                     |d¬¦  «        }|j        d         }|                     ¦   «         j        d         }|                      |                     ¦   «         j        d¦  «         d S )Nr   r·  zSixthMinor: flat
m1 c: vi
rò  rß  zA-)	r»  r¸  r¼  r©  ÚrecurseÚnotesr“  Úrootrk   )r*   r¸  r  r@  rJ   Úch0s         r   ÚtestSixthMinorParsezTest.testSixthMinorParse/  sx   € Ø%Ð%Ð%Ð%Ð%Ð%ðˆð �OŠO˜C¨ˆOÑ4Ô4ˆØŒG�AŒJˆØ�iŠi‰kŒkÔ Ô"ˆØ×Ò˜Ÿš™œœ¨$Ñ/Ô/Ð/Ð/Ð/r   c                óà   — d}t          j        ¦   «         }|                     |¦  «        }t          ¦   «         }|                     |j        ¦  «         |                      |j        d¦  «         d S )NzRTVersion: 2.5
m1 C: Iç      @)r   r9  r:  ru   r¥   r¡   r“  r}   )r*   r  r>  r<  Úpts        r   ÚtestSetRTVersionzTest.testSetRTVersion:  si   € ðˆåÔÑ Ô ˆØ—K’K Ñ$Ô$ˆ	ÝÑÔˆØ
×Ò˜9Ô+Ñ,Ô,Ð,Ø×Ò˜Ô,¨cÑ2Ô2Ð2Ð2Ð2r   c                ó`  — ddl m} d}|                     |d¬¦  «        }|j        d         }|                     t
          j        ¦  «                             ¦   «         }|                     t          j	        ¦  «        }|d         }|d         }|  
                    |j        j        j        d¦  «         |  
                    |j        d¦  «         |j        }	|  
                    |	j        j        j        d	¦  «         |  
                    |	j        d
¦  «         |                      |j        ¦  «         d S )Nr   r·  zm1 G: I b3 v d: i b4 Vrò  rß  r4   ÚGÚvÚDré   )r»  r¸  r¼  r©  r:   r   r;   rª  r   r@   r“  r   rj   ÚsteprD   rB   ÚassertIsNone)
r*   r¸  r  r@  rJ   r  rb   Ú	notPChordÚpChordÚpivots
             r   ÚtestPivotChordzTest.testPivotChordL  s  € Ø%Ð%Ð%Ð%Ð%Ð%à*ˆØ�OŠO˜C¨ˆOÑ4Ô4ˆØŒG�AŒJˆØ×!Ò!¥&¤.Ñ1Ô1×7Ò7Ñ9Ô9ˆØ×&Ò&¥uÔ'9Ñ:Ô:ˆØ˜1”Iˆ	Ø˜”ˆØ×Ò˜œÔ)Ô.°Ñ4Ô4Ð4Ø×Ò˜œ¨Ñ,Ô,Ð,ØÔ!ˆØ×Ò˜œœÔ-¨sÑ3Ô3Ð3Ø×Ò˜œ sÑ+Ô+Ð+à×Ò˜)Ô.Ñ/Ô/Ð/Ð/Ð/r   c                óÚ  — ddl m} d}|                     |d¬¦  «        }|j        d         }|                     t
          j        ¦  «        d         }|                      |                     |¦  «        d¦  «         |                     t
          j        ¦  «        d         }|                      |                     |¦  «        d	¦  «         |                     t
          j        ¦  «        d
         }|                      |                     |¦  «        d¦  «         |                     t
          j        ¦  «        d         }|                      |                     |¦  «        d¦  «         |                     t
          j        ¦  «        d         }	|                      |	                     |¦  «        d¦  «         |                     t
          j        ¦  «        d         }
|                      |
                     |¦  «        d¦  «         |                     t
          j        ¦  «        d         }|                      |                     |¦  «        d¦  «         |                     t
          j        ¦  «        d         }|                      |                     |¦  «        d¦  «         |                     t
          j        ¦  «        d         }|                      |                     |¦  «        d¦  «         d S )Nr   r·  z—Time Signature: 4/4
        m1 C: I
        Time Signature: 2/4
        m10 V
        Time Signature: 4/4
        m12 I
        m14-25 = m1-12
        rò  rß  rC  g       @é	   g      B@rÚ  g      C@é   g      D@rü  g      F@é   g      L@é   g      U@é   g     €U@é   g      V@)	r»  r¸  r¼  r©  r:   r   r;   r“  r  )r*   r¸  r  r@  rJ   Úm3Úm10Úm11Úm12Úm13Úm16Úm23Úm24r¾  s                 r   ÚtestTimeSigChangeszTest.testTimeSigChanges_  sq  € Ø%Ð%Ð%Ð%Ð%Ð%ðˆð �OŠO˜C¨ˆOÑ4Ô4ˆØŒG�AŒJˆØ×!Ò!¥&¤.Ñ1Ô1°!Ô4ˆØ×Ò˜×+Ò+¨AÑ.Ô.°Ñ4Ô4Ð4Ø×"Ò"¥6¤>Ñ2Ô2°1Ô5ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6Ø×"Ò"¥6¤>Ñ2Ô2°2Ô6ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6Ø×"Ò"¥6¤>Ñ2Ô2°2Ô6ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6Ø×"Ò"¥6¤>Ñ2Ô2°2Ô6ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6à×"Ò"¥6¤>Ñ2Ô2°2Ô6ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6Ø×"Ò"¥6¤>Ñ2Ô2°2Ô6ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6Ø×"Ò"¥6¤>Ñ2Ô2°2Ô6ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6Ø×"Ò"¥6¤>Ñ2Ô2°2Ô6ˆØ×Ò˜×,Ò,¨QÑ/Ô/°Ñ6Ô6Ð6Ð6Ð6r   c                ó
  — ddl m} |                     dd¬¦  «        }|                     ¦   «         j        d         }|                     ¦   «         j        d         }|                      |j        j        t          j	        d¦  «        ¦  «         |                      |j
        t          j	        d¦  «        ¦  «         |                      |j        j        t          j	        d¦  «        ¦  «         |                     d	d¬¦  «        }|                     ¦   «         j        d         }|                     ¦   «         j        d         }|                      |j        j        d
¦  «         |                      |j
        d
¦  «         |                      |j        j        d¦  «         |                     dd¬¦  «        }|                     ¦   «         j        d         }|                     ¦   «         j        d         }|                      |j        j        t          j	        d¦  «        ¦  «         |                      |j
        t          j	        d¦  «        ¦  «         |                      |j        j        t          j	        d¦  «        ¦  «         d S )Nr   r·  zm1 C: I b2.66 Vrò  rß  r4   g«ªªªªªú?g«ªªªªª@z"TimeSignature: 6/8
m1 C: I b2.66 Vr+  g      à?zm1 C: I b2.66.5 VgUUUUUUý?gUUUUUU@)r»  r¸  r¼  r½  r&  r“  rF   rà   r   ÚopFracrm  )r*   r¸  rK  Ún1Ún2s        r   ÚtestTupletszTest.testTuplets‚  s   € Ø%Ð%Ð%Ð%Ð%Ð%Ø�OŠOÐ-°kˆOÑBÔBˆØ�YŠY‰[Œ[Ô˜qÔ!ˆØ�YŠY‰[Œ[Ô˜qÔ!ˆØ×Ò˜œÔ2µF´MÀ%Ñ4HÔ4HÑIÔIÐIØ×Ò˜œ¥F¤M°%Ñ$8Ô$8Ñ9Ô9Ð9Ø×Ò˜œÔ2µF´MÀ%Ñ4HÔ4HÑIÔIÐIà�OŠOÐAÈ+ˆOÑVÔVˆØ�YŠY‰[Œ[Ô˜qÔ!ˆØ�YŠY‰[Œ[Ô˜qÔ!ˆØ×Ò˜œÔ2°EÑ:Ô:Ð:Ø×Ò˜œ EÑ*Ô*Ð*Ø×Ò˜œÔ2°EÑ:Ô:Ð:à�OŠOÐ/¸ˆOÑDÔDˆØ�YŠY‰[Œ[Ô˜qÔ!ˆØ�YŠY‰[Œ[Ô˜qÔ!ˆØ×Ò˜œÔ2µF´MÀ&Ñ4IÔ4IÑJÔJÐJØ×Ò˜œ¥F¤M°&Ñ$9Ô$9Ñ:Ô:Ð:Ø×Ò˜œÔ2µF´MÀ&Ñ4IÔ4IÑJÔJÐJÐJÐJr   r-   rì   c                óŒ   — ddl m} t          j        d¦  «        }|                     |d¬¦  «        }|j        j        dk    sJ ‚d S )Nr   r·  zx'
            Time Signature: 2/4
            m1 I
            m2 V
            m3 = m1
            m4-5 = m1-2
        rÞ  rß  rÚ  )r»  r¸  ÚtextwrapÚdedentr¼  rF   rà   )r*   r¸  Úempty_measures_with_copyr@  s       r   ÚtestCopyEmptyMeasureszTest.testCopyEmptyMeasures™  s_   € Ø%Ð%Ð%Ð%Ð%Ð%Ý#+¤?ð 4ñ $ô $Ð ð �OŠOÐ4¸[ˆOÑIÔIˆØŒzÔ'¨2Ò-Ð-Ð-Ð-Ð-Ð-r   c                óÌ  ‡ — ddl m} d2ˆ fd„}d3ˆ fd„}d4ˆ fd„}t          j        d¦  «        }|                     |d¬¦  «        }|t
          j                 }‰                      t          |¦  «        d¦  «         |\  }}	 ||ddd¦  «          ||	ddd¦  «          ||d ¦  «         t          j        d!¦  «        }
|                     |
d¬¦  «        }|t
          j                 }‰                      t          |¦  «        d¦  «         |\  }}	 ||ddd¦  «          ||	dd"d¦  «          ||d#¦  «         t          j        d$¦  «        }|                     |d¬¦  «        }|t
          j                 }‰                      t          |¦  «        d%¦  «         |\  }}}} ||ddd¦  «          ||dd"d&¦  «          ||ddd%¦  «          ||dd"d%¦  «         |t          j
                 D ]d}|t          j                 }‰                      t          |¦  «        d¦  «         ‰                      |                     ¦   «         j        d'¦  «         Œe ||d(¦  «         t          j        d)¦  «        }|                     |d¬¦  «        }|t
          j                 }‰                      t          |¦  «        d&¦  «         |\  }}} ||ddd¦  «          ||ddd¦  «          ||ddd¦  «         |t          j                 }‰                      t          |¦  «        d&¦  «         |\  }}} ||d*g¦  «          ||d+g¦  «          ||d,g¦  «          ||d-¦  «         t          j        d.¦  «        }|                     |d¬¦  «        }|t
          j                 }‰                      t          |¦  «        d&¦  «         |t
          j                 \  }}} ||ddd¦  «          ||ddd&¦  «          ||ddd¦  «         |t          j                 }‰                      t          |¦  «        d&¦  «         |\  }}} ||d*d/g¦  «          ||d+g¦  «          ||d,d0g¦  «          ||d1¦  «         d S )5Nr   r·  Ú
repeat_barú
bar.Repeatr  r.   rm  rÆ   ÚmNumberrù   r-   rì   c                ó´   •— ‰                      | j        |¦  «         ‰                      | j        |¦  «         ‰                      | j        j        |¦  «         d S r6  )r“  r  rm  Ú
activeSiter<   )rS  r  rm  rU  r*   s       €r   Ú_repeat_testerz(Test.testRepeats.<locals>._repeat_tester¨  sY   ø€ ð ×Ò˜ZÔ1°9Ñ=Ô=Ð=Ø×Ò˜ZÔ.°Ñ7Ô7Ð7Ø×Ò˜ZÔ2Ô9¸7ÑCÔCÐCÐCÐCr   r@  ústream.Streamrà   c                ó  •— t          | t          j                 ¦  «        }t          j        |¦  «        }‰                     |                     ¦   «         ¦  «         |                     ¦   «         }‰                     |j	        |¦  «         d S r6  )
Únextr   r{   r   ÚExpanderrÇ  ÚrepeatBarsAreCoherentÚprocessr“  rà   )r@  rà   rJ   rM  Úp2r*   s        €r   Ú_test_expandedz(Test.testRepeats.<locals>._test_expanded¯  sq   ø€ õ �Q•v”{”^Ñ$Ô$ˆAÝ” Ñ"Ô"ˆAØ�OŠO˜A×3Ò3Ñ5Ô5Ñ6Ô6Ð6Ø—’‘”ˆBØ×Ò˜RÔ-¨}Ñ=Ô=Ð=Ð=Ð=r   rh  úspanner.RepeatBracketÚexpectedMeasuresú	list[str]c                ól   •— d„ | t           j                 D ¦   «         }‰                     ||¦  «         d S )Nc                ó6   — g | ]}|                      ¦   «         ‘ŒS r   )ÚmeasureNumberWithSuffix)rš  rL   s     r   rœ  zCTest.testRepeats.<locals>._test_ending_contents.<locals>.<listcomp>»  s$   € ÐSÐSÐS¸1˜1×4Ò4Ñ6Ô6ÐSÐSÐSr   )r   r;   r“  )rh  rb  Úmeasure_nosr*   s      €r   Ú_test_ending_contentsz/Test.testRepeats.<locals>._test_ending_contents¸  s=   ø€ ð TÐSÀÅ6Ä>Ô@RÐSÑSÔSˆKØ×Ò˜[Ð*:Ñ;Ô;Ð;Ð;Ð;r   zS
            Time Signature: 3/4
            m1 ||: V
            m2 I :||
        rÞ  rß  rC  rî   rx   r4   r
  r"  g      (@zB
            Time Signature: 2/4
            m1 ||: I :||
        g       @g      @zw
            Time Signature: 2/4
            m1 I
            m2 ||:
            m3 :||
            m4 ||: :||
        rE  rD  r§  g      ,@z}
            Time Signature: 3/4
            m1 ||: I
            m2a IV :||
            m2b V :||
            m2c I
        Ú2aÚ2bÚ2cg      2@z²
            TimeSignature: 3/4
            m1 ||: I
            m2a IV
            m3a V :||
            m2b V :||
            m2c IV
            m3c V
            m4 I
        Ú3aÚ3cg      ;@)
rS  rT  r  r.   rm  rÆ   rU  rù   r-   rì   )r@  rY  rà   rÆ   r-   rì   )rh  ra  rb  rc  r-   rì   )r»  r¸  rN  rO  r¼  r   r  r“  r9   r   r;   r   r@   rª  rD   r   re  )r*   r¸  rX  r`  rh  Úsimple_repeatsr@  Úbr_iterÚstart_repeatÚ
end_repeatÚsingle_bar_repeatsÚempty_bars_with_repeatsÚstart_repeat1Úend_repeat1Ústart_repeat2Úend_repeat2rl  Úrn_iterÚthree_endingsÚrb_iterÚfirst_endingÚsecond_endingÚthird_endingÚmore_complex_examples   `                       r   ÚtestRepeatszTest.testRepeats¥  sF  ø€ Ø%Ð%Ð%Ð%Ð%Ð%ð	Dð 	Dð 	Dð 	Dð 	Dð 	Dð	>ð 	>ð 	>ð 	>ð 	>ð 	>ð	<ð 	<ð 	<ð 	<ð 	<ð 	<õ "œð *ñ ô ˆð
 �OŠO˜N°;ˆOÑ?Ô?ˆØ•C”J”-ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø#*Ñ ˆ�jØˆ�| W¨c°1Ñ5Ô5Ð5Øˆ�z 5¨#¨qÑ1Ô1Ð1Øˆ�q˜$ÑÔÐå%œ_ð .ñ ô Ðð �OŠOÐ.°{ˆOÑCÔCˆØ•C”J”-ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø#*Ñ ˆ�jØˆ�| W¨c°1Ñ5Ô5Ð5Øˆ�z 5¨#¨qÑ1Ô1Ð1Øˆ�q˜#ÑÔÐå"*¤/ð 3ñ #ô #Ðð �OŠOÐ3¸KˆOÑHÔHˆØ•C”J”-ˆØ×Ò�˜W™œ qÑ)Ô)Ð)ØAHÑ>ˆ�{ M°;Øˆ�} g¨s°AÑ6Ô6Ð6Øˆ�{ E¨3°Ñ2Ô2Ð2Øˆ�} g¨s°AÑ6Ô6Ð6Øˆ�{ E¨3°Ñ2Ô2Ð2Ø�œÔ(ð 	:ð 	:ˆGØ�eÔ0Ô1ˆGØ×Ò�S ™\œ\¨1Ñ-Ô-Ð-ð
 ×Ò˜WŸ]š]™_œ_Ô3°SÑ9Ô9Ð9Ð9àˆ�q˜$ÑÔÐå œð )ñ ô ˆð �OŠO˜M°+ˆOÑ>Ô>ˆØ•C”J”-ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø18Ñ.ˆ�k ;Øˆ�| W¨c°1Ñ5Ô5Ð5Øˆ�{ E¨3°Ñ2Ô2Ð2Øˆ�{ E¨3°Ñ2Ô2Ð2Ø•GÔ)Ô*ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø4;Ñ1ˆ�m \ØÐ˜l¨T¨FÑ3Ô3Ð3ØÐ˜m¨d¨VÑ4Ô4Ð4ØÐ˜l¨T¨FÑ3Ô3Ð3Øˆ�q˜$ÑÔÐå'œð 	0ñ 	 ô 	 Ðð �OŠOÐ0¸ˆOÑEÔEˆØ•C”J”-ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø12µ3´:´Ñ.ˆ�k ;Øˆ�| W¨c°1Ñ5Ô5Ð5Øˆ�{ E¨3°Ñ2Ô2Ð2Øˆ�{ E¨3°Ñ2Ô2Ð2Ø•GÔ)Ô*ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø4;Ñ1ˆ�m \ØÐ˜l¨T°4¨LÑ9Ô9Ð9ØÐ˜m¨d¨VÑ4Ô4Ð4ØÐ˜l¨T°4¨LÑ9Ô9Ð9Øˆ�q˜$ÑÔÐÐÐr   N)r-   rì   )r   r   r   rÜ  rå  rç  ré  rí  rð  rù  r¿  r  r   r#  r)  r-  r7  rG  rL  rQ  r  r   r   r   rÌ  rÌ  V  sE  € € € € € ð ð  ð  ð"_ð _ð _ð"_ð _ð _ð&_ð _ð _ð5ð 5ð 5ð0Hð Hð Hð4ð 4ð 4ð,]ð ]ð ]ð:8ð 8ð 8ð2'ð 'ð 'ð(;ð ;ð ;ð.	0ð 	0ð 	0ð3ð 3ð 3ð$0ð 0ð 0ð&7ð 7ð 7ðFKð Kð Kð.
.ð 
.ð 
.ð 
.ðz ð z ð z ð z ð z ð z r   rÌ  z
list[type]Ú
_DOC_ORDERÚ__main__)rU   rV   rJ   rW   rK   rX   r6  )rQ  rV   rL   rë   r�   rR  ):r7  Ú
__future__r   r=   rN  r™   Útypingr°   Úunittestr»  r   r   r   Úmusic21.common.typesr   r   r	   r
   r   r   r   r   r   r   rŠ  r   r   r   r   ÚEnvironmentr¾   r|   r/  r½   r   ÚElementWrapperr!   ÚMusic21Objectr#   rT   rc   rr   rs   Ú__annotations__ru   rB  rV  rè   rc  r    r�   rƒ  ÚTestCaser…  rÌ  r€  r   ÚmainTestr   r   r   ú<module>rŒ     s  ððlð lð lðZ #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à&ˆ{Ô&Ð'<Ñ=Ô=€àÐ ð €ð	ð 	ð 	ð 	ð 	 ,Ô"?ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	 Ô 3ñ 	ô 	ð 	ð*ð *ð *ð *ð * 4Ô#5ñ *ô *ð *ð3ð 3ð 3ðlCð Cð Cð CðLð ð ðB :<€Ð ;Ð ;Ð ;Ñ ;ðX	&ð X	&ð X	&ð X	&ð X	&ñ X	&ô X	&ð X	&ðvð ð ð ð>  ¨°¸ÀÈÐPQÐRÐR€ð 48ð49ð 49ð 49ð 49ð 49ðn-ð -ð -ð`Kð Kð Kð$Tð Tð Tðn Dð  Dð  Dð  DðLP5ð P5ð P5ð P5ð P5ˆxÔ ñ P5ô P5ð P5ðfI ð I ð I ð I ð I ˆ8Ôñ I ô I ð I ð^ €
Ð Ð Ð Ñ ð ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   