
    rh                      S SK Jr  S SKrS SKrS SKrS SKJs  Jr	  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S S	K
Jr  S S
K
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
Jr  S SK
J r   S SK!J"r"J#r#J$r$J%r%J&r&   " S S\RN                  5      r(\)S:X  a  S SK
r
\
RT                  " \(5        gg)    )annotationsN)articulations)bar)chord)common)defaultsduration)dynamics)expressions)harmony)
instrumentkey)layout)metadata)meter)note)pitch)repeat)spanner)stream)style)tempo)text)MusicXMLImporterMusicXMLImportExceptionMusicXMLWarningMeasureParser
PartParserc                     \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S; r=S< r>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSUSF jrHSG rISH rJSI rKSJ rLSK rMSL rNSM rOSN rPSO rQSP rRSQ rSSR rTSSrUgT)VTest$   c                .    [         R                  " U5      $ N)ET
fromstring)selfelTexts     X/home/james-whalen/.local/lib/python3.13/site-packages/music21/musicxml/test_xmlToM21.pyELTest.EL%   s    }}V$$    c                j    SnU H  nU[        U5      S-   -  nM     US[        U5      S-
   nUS-  nU$ )z^
make it so that the tests that look for the old-style pitch.Pitch
representation still work.
[z, r      ])strlen)r(   listInoutps       r*   pitchOutTest.pitchOut(   sG    
 A3q6D= C !CHqL!s

r-   c                f    [        5       nSUl        U R                  [        UR                  5        g )Nz<score-timewise />)r   xmlTextassertRaisesr   parseXMLText)r(   MIs     r*   testParseSimpleTest.testParseSimple4   s&    .
12??Cr-   c                :   Sn[        5       nU R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  U5      n[        R                  " 5       nU R                  [        UR                  5      S5        U R                  SUR                  S   5        [        5       nUR                  X45        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  SUR                  5        Sn[        5       nU R                  U5      n[        R                  " 5       nUR                  X45        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  SUR                  5        U R                  SUR                  5        g	)
z9
Test that the Encoding tag sets software etc. properly.
aX  
            <encoding>
              <encoding-date>2025-05-21</encoding-date>
              <software>Finale v26.3 for Mac</software>
              <supports attribute="new-system" element="print" type="yes" value="yes" />
              <supports attribute="new-page" element="print" type="yes" value="yes" />
            </encoding>
           music21r   zFinale v26.3 for Maca  
            <encoding>
              <encoding-date>2099-05-21</encoding-date>
              <software>music21 v.99</software>
              <software>Finale v90 for ChatGPT Implant</software>
              <supports attribute="new-system" element="print" type="yes" value="no" />
              <supports attribute="new-page" element="print" type="yes" value="yes" />
            </encoding>
        zmusic21 v.99zFinale v90 for ChatGPT ImplantN)r   assertFalseapplyFinaleWorkaroundsdefinesExplicitSystemBreaksdefinesExplicitPageBreaksr+   r   MetadataassertEqualr3   softwareassertInprocessEncoding
assertTrue)r(   enc1mxl_importerencodingmds        r*   test_processEncodingTest.test_processEncoding9   s    ()<<=AAB??@774= R[[)1-iQ0')$$X2;;<@@A>>?,bkk: ()774= $$X2<<=AAB>>?nbkk26Dr-   c                4   U R                  S5      nU R                  S5      n[        X!S9nSUl        SnU R                  [        5       nUR                  5         S S S 5        U R                  [        WR                  5      U5        g ! , (       d  f       N4= f)Nz5<score-part><part-name>Elec.</part-name></score-part>zF<part><measure><note><type>thirty-tooth</type></note></measure></part>)mxPartmxScorePart1zGIn part (Elec.), measure (0): found unknown MusicXML type: thirty-tooth)	r+   r    partIdr;   r   parserH   r2   	exception)r(   rU   rT   ppmsgerrors         r*   testExceptionMessageTest.testExceptionMessagej   sw    ggUVabv?	W675HHJ 8U__-s3 87s   
B		
Bc                    SSK Jn  UR                  S5      nUR                   H1  nU[        R
                     nU R                  [        U5      S5        M3     g )Nr   corpuszk80/movement3   )rB   ra   rX   partsr   RepeatrH   r3   )r(   ra   sr6   posts        r*   testBarRepeatConversionTest.testBarRepeatConversionv   sD    " LL)ASZZ=DSY* r-   c                ~   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  S   R                  [        R                  5      R                  5       nU R                  UR                  5       5        U R                  UR                   Vs/ s H  oUR                  PM     snSS/5        U R                  UR                  S    Vs/ s H  ofR                   PM     sn/ SQ5        U R                  UR                  S    Vs/ s H  ofR                   PM     sn/ SQ5        U R                  UR                  S    Vs/ s H  ofR                   PM     sn/ SQ5        U R                  UR                  S    Vs/ s H  ofR                   PM     sn/ SQ5        g s  snf s  snf s  snf s  snf s  snf )	Nr   	convertertestPrimitiverV   2)              ?       @      @rA   )ro   rq         @rr   g      @)rB   rk   music21.musicxmlrm   rX   voiceDoublerc   getElementsByClassr   MeasurefirstrL   	hasVoicesrH   voicesidoffset)r(   rk   rm   re   m1ves          r*   
testVoicesTest.testVoices   s5   %2OOM556WWQZ**6>>:@@B'		2	1$$	2S#J?BIIaL9Lq((L9;OPBIIcN;Nq((N;=QRBIIaL9Lq((L9;TUBIIcN;Nq((N;=VW 39;9;s   F&F+F0F5F:c                6   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        U[        R                     5      S5        U R                  [        UR                  5       R                  [        R                  5      5      S5        g )Nr   rj   rl      )rB   rk   rt   rm   rX   spannersSlurs33crH   r3   r   Spannerrecurserv   r(   rk   rm   re   s       r*   testSlurInputATest.testSlurInputA   sf    %2OOM::;Qw/0!4 	QYY[;;GOOLMqQr-   c                   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        UR                  5      S5        U R                  [        UR                  S   [        R                     5      S5        U R                  [        UR                  S   [        R                     5      S5        U R                  UR                  S   [        R                  5        U R                  UR                  S   [        R                  5        U[        R                     nU R                  [        U5      S5        U R                  US   US   5        U R!                  US   US   5        g )Nr   rj   rl   r0   rA   )rB   rk   rt   rm   rX   pianoStaff43arH   r3   rc   r   NoteassertIsInstancer   	PartStaffr   KeySignatureassertIsNot)r(   rk   rm   re   keySigss        r*   testMultipleStavesPerPartATest.testMultipleStavesPerPartA   s   %2OOM778QWWq)QWWQZ		23Q7QWWQZ		23Q7aggaj&*:*:;aggaj&*:*:; C$$%Wq)WQZ0WQZ0r-   c                d   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        UR                  5      S5        U R                  [        UR                  S   [        R                     5      S5        U R                  [        UR                  S   [        R                     5      S5        U R                  [        UR                  S   [        R                     5      S5        U R                  [        UR                  S   [        R                     5      S5        g )Nr   rj   	testFilesr0      rA      )rB   rk   rt   r   rX   moussorgskyPromenaderH   r3   rc   r   r   r   Chord)r(   rk   r   re   s       r*   testMultipleStavesPerPartBTest.testMultipleStavesPerPartB   s    %.OOI::;QWWq)QWWQZ		23R8QWWQZ		23Q7QWWQZ45r:QWWQZ45r:r-   c                   SSK Jn  UR                  S5      nU R                  [	        UR
                  5      S5        U R                  [	        UR                  [        R                  5      5      S5        [        5       nUR                  5        H  nUR                  [        U5      5        M     U R                  [	        U5      [	        UR                  5       5      5        g )Nr   r`   zschoenberg/opus19/movement2r0   )rB   ra   rX   rH   r3   rc   rv   r   r   setr   addr{   )r(   ra   re   setElementIdsels        r*   testMultipleStavesPerPartCTest.testMultipleStavesPerPartC   s    "LL67QWWq)Q11&2B2BCDaH ))+Bbf% ]+S-=>r-   c                &   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        UR                  [        R                  5      5      S5        U R                  [        UR                  5       R                  [        R                  5      5      S5        UR                  S   R                  [        R                  5      R!                  5       nUR!                  5       nUR#                  USS9nU R                  US5        g )Nr   rj   rl   r0   T)returnSpecialhighestTime)rB   rk   rt   rm   rX   mixedVoices1arH   r3   rv   r   r   r   r   Barlinerc   rw   lastelementOffset)r(   rk   rm   re   lastMeasurelastElement
lastOffsets          r*   #testMultipleStavesInPartWithBarline(Test.testMultipleStavesInPartWithBarline   s    %2OOM778Q11&2B2BCDaHQYY[;;CKKHI1Mggaj33FNNCHHJ!&&( ..{$.O
]3r-   c                   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        UR                  [        R                  5      5      S5        U[        R                     S   nU R                  [        UR                  [        R                  5      5      S5        U[        R                     S   nU R                  UR                   Vs/ s H  ofR                  PM     sn/ SQ5        UR!                  SS9  U R                  UR                   Vs/ s H  ofR                  PM     sn/ S	Q5        g s  snf s  snf )
Nr   rj   rl   r0   rA   )E-5E-6D5D6C5C6r   r   F5F6E5E6r   r   r   r   zF#5A5zG#5B5TinPlace)E-4r   D4r   C4r   r   r   F4r   E4r   r   r   r   r   zF#4A4zG#4B4)rB   rk   rt   rm   rX   pianoStaffWithOttavarH   r3   rv   r   r   r   Ottavarw   pitchesnameWithOctavetoWrittenPitch)r(   rk   rm   re   ps0m0r6   s          r*   "testMultipleStavesInPartWithOttava'Test.testMultipleStavesInPartWithOttava   s   %2OOM>>?Q11&2B2BCDaH  !!$S33GNNCDaH #')zz2z!z2?	

 	
&')zz2z!z2?	
 3 3s   E$E	c                B   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        UR                  5       R                  5      S5        UR                  SS5      nU R                  [        UR                  5       R                  5      S5        g )Nr   rj   rl   r0      )rB   rk   rt   rm   rX   spanners33aassertGreaterEqualr3   flattenspannersmeasuresrH   )r(   rk   rm   re   exs        r*   testSpannersATest.testSpannersA   sr    %2OOM556AIIK$8$8 91= ZZ1 	RZZ\223Q7r-   c                   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        U[        R                     5      S5        UR                  S   nUR                  [        R                  5      S   nU R                  [        UR                  [        R                  5      5      S5        UR                  [        R                  5      S   nU R                  [        UR                  [        R                  5      5      S5        UR                  [        R                  5      nU R                  U Vs/ s H  oR                  PM     sn/ SQ5        g s  snf )Nr   rj   rl   r   rA   )rp         ?      @)rB   rk   rt   rm   rX   textExpressionsrH   r3   r   TextExpressionrc   rv   r   rw   r|   )	r(   rk   rm   re   p1r}   m2teStreamtes	            r*   testTextExpressionsATest.testTextExpressionsA  s   %2OOM99:Q{99:;Q?WWQZ""6>>215R22;3M3MNOQRS""6>>215R22;3M3MNOQRS(()C)CDh7h))h7I7s   E%c                   SSK Jn  UR                  S5      nUR                  S   nUR	                  [
        R                  5       H  nUR                  5       R                   H  nUR                  R                  S;   d  M  UR                  R                   SUR                  R                   3n[        R                  " U5      nSUR                   l        SUR                   l        SUR                   l        S	UR                   l        S
UR                   l        UR-                  UR.                  U5        M     M     g )Nr   r`   bwv66.6)B
   boldcenter	rectanglei)rB   ra   rX   rc   rv   r   rw   r   notesr   namer   r
   quarterLengthr   r   r   fontSize
fontWeightjustify	enclosure	absoluteYinsertr|   )r(   ra   re   r6   mnr[   r   s           r*   testTextExpressionsCTest.testTextExpressionsC  s    "LL#GGAJ%%fnn5AYY[&&77<<5(WW334Bqzz7O7O6PQC$33C8B(*BHH%*0BHH''/BHH$)4BHH&),BHH&HHQXXr* ' 6r-   c                h   SSK Jn  UR                  S5      nUR                  S   nUR	                  [
        R                  5      SS   Hf  nS H]  n[        R                  " U5      nSUR                  l
        SUR                  l        S	UR                  l        UR                  XV5        M_     Mh     g )
Nr   r`   r   rA   )r   rs   r   r   r   )rB   ra   rX   rc   rv   r   rw   r   r   r   r   r   r   r   )r(   ra   re   r6   r   posr   s          r*   testTextExpressionsDTest.testTextExpressionsD+  s    "LL#GGBK%%fnn5ab9A! //4&,##+ %0"! " :r-   c                   SS K n[        R                  " 5       n[        S5       Hq  n[        R                  " US-   S9nUR                  [        R                  " SS95        UR                  [        R                  " SS95        UR                  U5        Ms     UR                  [        R                  5       H  n[        S	5       Vs/ s H  oUS
-  PM	     nnUR                  U5        US S nU H]  n[        R                  " U5      nSUR                  l        SUR                  l        SUR                  l        UR%                  Xx5        M_     M     g s  snf )Nr   rb   rA   )numberT)isNewwholetype   g      ?   r   r   r   )randomr   Streamrangerw   appendr   SystemLayoutr   Restrv   shuffler   r   r   r   r   r   r   )	r(   r  re   ir   xoffsetsor   s	            r*   testTextExpressionsETest.testTextExpressionsE9  s    MMOqAa!e,AHHV((t45HHTYYG,-HHQK	 
 %%fnn5A).r3A4xG3NN7#bqkG //2&,##+ %0" 	 63s   	Ec                @   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        U[        R                     5      S5        U R                  [        U[        R                     5      S5        U R                  [        U[        R                     5      S5        UR	                  UR                  5      nU R                  [        U[        R                     5      S5        U R                  [        U[        R                     5      S5        g )Nr   rl   rj   rA   r0   )rt   rm   rB   rk   rX   repeatExpressionsArH   r3   r   SegnoFineDalSegnoAlFinerepeatExpressionsBCodaDaCapoAlCodar(   rm   rk   re   s       r*   testImportRepeatExpressionsA!Test.testImportRepeatExpressionsAM  s    2% OOM<<=Qv||_-q1Qv{{^,a0Qv4456: OOM<<=Qv{{^,a0Qv2234a8r-   c                >   SSK Jn  UR                  SS5      nU R                  [	        U[
        R                     5      S5        UR                  S   R                  SS5      nUR                  [
        R                  5      nU R                  [	        U5      S5        g )	Nr   r`   	opus74no1r      H   M   r0   )
rB   ra   rX   rH   r3   r   RepeatBracketrc   r   rv   )r(   ra   re   sSub
rbSpannerss        r*   testImportRepeatBracketATest.testImportRepeatBracketA^  s}    "LLa(Qw4456:
 wwqz""2r* ,,W-B-BC
Z!,r-   c                ,   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        UR                  5      S5        U R                  [        UR                  S   R                  [        R                  5      S   R                  5      S5        UR	                  UR                  5      nU R                  [        UR                  5      S5        U R                  [        UR                  S   R                  [        R                  5      S   R                  5      S5        UR	                  UR                  5      nU R                  [        UR                  5      S5        U R                  [        UR                  S   R                  [        R                  5      S   R                  5      S5        U R                  [        UR                  S   R                  [        R                  5      S   R                  5      S5        g )Nr   rl   rj   r0   rA   )rt   rm   rB   rk   rX   r   rH   r3   rc   rv   r   rw   rz   mixedVoices1bmixedVoices2r  s       r*   testImportVoicesATest.testImportVoicesAn  s    	3% OOM778QWWq)QWWQZ::NN%v'()	+
 OOM778QWWq)QWWQZ::NN%v'()	+
 OOM667QWWq)QWWQZ::NN%v'()	+QWWQZ::NN%v'()	+r-   c                    SSK Jn  SSKJn  UR	                  UR
                  5      nU[        R                     nU R                  [        U5      S5        g )Nr   rl   rj   r   )
rt   rm   rB   rk   rX   metronomeMarks31cr   TempoIndicationassertGreaterr3   )r(   rm   rk   re   mmss        r*   testImportMetronomeMarksATest.testImportMetronomeMarksA  s@    2%OOM;;<%%&3s8Q'r-   c                   SSK Jn  UR                  S5      nU R                  [	        UR                  5       [        R                     5      S5        UR                   H  nUR                  S5      [        R                     R                  5       nU R                  UR                  5        U R                  UR                  S5        U R                  UR                  [        R                   " S5      5        M     g)zH
Import sound tempo marks as MetronomeMarks but only set numberSounding
r   r`   zbach/bwv69.6.xmlr   `   rp   N)rB   ra   rX   rH   r3   r   r   MetronomeMarkrc   measurerx   assertIsNoner   numberSoundingreferentr
   Duration)r(   ra   re   r6   mms        r*   testImportMetronomeMarksBTest.testImportMetronomeMarksB  s     	#LL+,QYY[)<)<=>BA1e11288:Bbii(R..3R[[(*;*;C*@A	 r-   c                B   SSK Jn  UR                  S5      nU R                  [	        UR
                  R                  5       [        R                     5      S5        U R                  [	        UR
                  R                  5       [        R                     5      S5        g)z,
Import tempo into only the first PartStaff
r   r`   zdemos/two-partsrA   N)
rB   ra   rX   rH   r3   rc   rx   r   r6  r   )r(   ra   re   s      r*   testImportMetronomeMarksCTest.testImportMetronomeMarksC  sj     	#LL*+QWW]]_U-@-@ABAFQWW\\^E,?,?@A1Er-   c                R    SSK Jn  SSKJn  UR	                  UR
                  5      ng )Nr   rl   rj   )rt   rm   rB   rk   rX   graceNotes24a)r(   rm   rk   unused_ss       r*   testImportGraceNotesATest.testImportGraceNotesA  s    2%??=#>#>?r-   c                N   SSK Jn  SSKJn  [        R
                  " S5      nSUl        SUl        [        R
                  " S5      nSUl        [        R                  " X4/5      nS	Ul
        UR                  5       nUR                  U5      R                  S
5      nUR                  U5      nUR                  5       R                  S   n	U R!                  U	R#                  U	R$                  S   5      S5        U R!                  U	R#                  U	R$                  S   5      S5        g )Nr   )m21ToXmlrj   f3diamonddownc4noStemr0   zutf-8rA   )rt   rH  rB   rk   r   r   noteheadstemDirectionr   r   r   GeneralObjectExporterrX   decoder   r   rH   getStemDirectionr   )
r(   rH  rk   n1n2cGEXxmlinputStreamchordResults
             r*   testChordalStemDirImportTest.testChordalStemDirImport  s     	.% YYt_!YYt_#KK!,,.iil!!'*  ooc*!))+11!4 	55k6I6I!6LMvV55k6I6I!6LMxXr-   c                   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  [        R                  5      nU R                  [        U5      S5        US   nU R                  UR                  S5        U R                  UR                  5        US   nU R                  UR                  S5        U R                  UR                  5        g )Nr   rl   rj   r0   linerA   brace)rt   rm   rB   rk   rX   staffGroupsNested41drv   r   
StaffGrouprH   r3   symbolrL   barTogether)r(   rm   rk   re   staffGroupssg1sg2s          r*   testStaffGroupsATest.testStaffGroupsA  s    2%OOM>>?**6+<+<=[)1-!nV,(!nW-(r-   c                   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  [        R                  5      nU R                  [        U5      S5        U R                  US   R                  S5        U R                  US   R                  S5        U R                  US   R                  R                  S5        g )Nr   rl   rj   rA   r^  T)rt   rm   rB   rk   rX   r   rv   r   r`  rH   r3   ra  assertIsrb  r   hideObjectOnPrint)r(   rm   rk   re   sgss        r*   testStaffGroupsPianoTest.testStaffGroupsPiano  s    2%OOM778""6#4#45S1%Q0c!f(($/c!fll44d;r-   c                   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  S   R                  5       R                  [        R                  5      R                  5       nUR                  S   R                  5       R                  [        R                  5      R                  5       nU R                  [        UR                  5      S5        U R                  [        UR                  5      S5        g )Nr   rl   rj   rA   <music21.interval.Interval M-2>z<music21.interval.Interval M-6>)rt   rm   rB   rk   rX   transposingInstruments72arc   r   rv   r   
Instrumentrx   rH   r2   transposition)r(   rm   rk   re   i1i2s         r*   testInstrumentTranspositionA!Test.testInstrumentTranspositionA  s    2%OOMCCDWWQZ!44Z5J5JKQQSWWQZ!44Z5J5JKQQS 	R--.0QRR--.0QRr-   c                	   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  S   [        R                     R                  5       nU R                  [        U5      S5        US   nU R                  U[        R                  5        UR                  S   [        R                     R                  5       nU R                  [        U5      S5        US   nU R                  U[        R                  5        UR                  S   [        R                     R                  5       nU R                  [        U5      S5        US   n	U R                  U	[        R                  5        U R                  [!        US   R"                  5      S5        U R                  [!        US   R"                  5      S5        U R                  [!        US   R"                  5      S	5        U R                  [!        US   R"                  5      S
5        U R                  [!        US   R"                  5      S5        U R                  [!        U	R"                  5      S5        U R                  U R%                  UR                  S   R'                  5       R(                  5      S5        U R                  U R%                  UR                  S   R'                  5       R(                  5      S5        U R                  U R%                  UR                  S   R'                  5       R(                  5      S5        U R+                  UR                  S   R'                  5       R,                  5        UR/                  SS9n
U R                  U
R                  S   R'                  5       R(                   Vs1 s H  oR0                  iM     snS15        U R                  U
R                  S   R'                  5       R(                   Vs1 s H  oR0                  iM     snS15        U R                  U
R                  S   R'                  5       R(                   Vs1 s H  oR0                  iM     snS15        UR3                  5       nU R                  UR'                  5       R(                   Vs1 s H  oR0                  iM     snS15        g s  snf s  snf s  snf s  snf )Nr   rl   rj   r   rA   r0   Nonez<music21.interval.Interval P-5>z<music21.interval.Interval P1>ro  z<music21.interval.Interval m3>zp[A4, A4, A4, A4, A4, A4, A4, A4, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, A4, A4, A4, A4]zx[B4, B4, B4, B4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, F#4, B4, B4, B4, B4, B4, B4]zd[E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5, E5]Fr   r   )rt   rm   rB   rk   rX   transposing01rc   r   rq  r   rH   r3   r   OboeClarinetHornr2   rr  r7   r   r   rC   atSoundingPitchtoSoundingPitchr   chordify)r(   rm   rk   re   iStream1rs  iStream2rt  iStream3i3	sSoundingr6   sChordss                r*   testInstrumentTranspositionB!Test.testInstrumentTranspositionB  s   2%OOM778 771:j334;;=X*a[b*//2 771:j334;;=X*a[b*"5"56771:j334;;=X*a[b*//2Xa[667@Xa[6679Z[Xa[6679YZXa[6679Z[Xa[6679YZR--.0QRqwwqz'9'9';'C'CD-	. 	qwwqz'9'9';'C'CDN	O 	qwwqz'9'9';'C'CD=	> 	++-==>%%e%4	 	IOOA4F4N4N4P4X4XY4Xq**4XY	!IOOA4F4N4N4P4X4XY4Xq**4XY	!IOOA4F4N4N4P4X4XY4Xq**4XY	! **,GOO4E4M4MN4Mq**4MN	! ZYY
 Os   *S<SS#Sc                    SSK Jn  SSKJn  UR	                  UR
                  5      nU[        R                     nU R                  [        U5      S5        g )Nr   rj   rl      )
rB   rk   rt   rm   rX   ry  r   rq  rH   r3   )r(   rk   rm   re   
instStreams        r*   testInstrumentTranspositionC!Test.testInstrumentTranspositionCE  sB    %2OOM778z,,-
 	Z!,r-   c                L   SSK Jn  UR                  S5      nU R                  [	        U[
        R                     5      S5        U[
        R                      Vs/ s H  o3R                  PM     nnU R                  U/ SQ5        U[
        R                      Vs/ s H  n[        UR                  5       5      PM     nnU R                  U/ SQ5        U[
        R                      Vs1 s H  n[        UR                  5      iM     nnU R                  U1 Sk5        UR                  S5      nU R                  [	        U[
        R                     5      S	5        UR                  S
5      nU R                  [	        U[
        R                     5      S5        g s  snf s  snf s  snf )Nr   r`   z%leadSheet/berlinAlexandersRagtime.xmlr   )majordominant-seventhr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )F3C3r  B-2r  r  G2r  r  r  r  r  F2r  r  r  r  r  r  >   CFC7F7G7B-zmonteverdi/madrigal.3.12.xml
   zleadSheet/fosterBrownHair.xml(   )rB   ra   rX   rH   r3   r   ChordSymbol	chordKindr2   rootfigure)r(   ra   re   hmatchs        r*   testHarmonyATest.testHarmonyAQ  s[   "LL@AQw2234b9&'(;(;&<=&<&<= !3 	4 )*'*=*=(>?(>1QVVX(>? !^ 	_ )*'*=*=(>?(>1QXX(>? BCLL78Qw2234b9LL89Qw2234b9) > @
 @s   F#F'F!c                   SSK Jn  [        R                  " 5       S-   nUR	                  USS9nUR
                  S   nSnUR                  5       R                   H-  nUR                   H  nSUR                  ;   d  M  US-  nM     M/     U R                  US5        SnUR
                  S	   R                  5       R                   H-  nUR                   H  n	S
U	R                  ;   d  M  US-  nM     M/     U R                  US5        g )Nr   rj   z/beethoven/opus133.mxlmusicxmlformatTrillrA   6   r0   TechnicalIndication)rB   rk   r   getCorpusFilePathrX   rc   r   r   r   classesrH   r   )
r(   rk   	beethovenre   r   
countTrillr   r   countTechnicalas
             r*   x_testOrnamentAndTechnicalTest.x_testOrnamentAndTechnicalo  s    %,,.1II	OOIjO9WWQZ
##A]]aii'!OJ # $ 	R( ##%++A__(AII5"a'N % , 	+r-   c                p   SSK Jn  SSKJn  UR	                  UR
                  5      n[        US   5      nU R                  US5        SnUR                  5       R                   H-  nUR                   H  nSUR                  ;   d  M  US-  nM     M/     U R                  US5        SnUR                  5       R                   H-  nUR                   H  nSUR                  ;   d  M  US-  nM     M/     U R                  US5        SnUR                  5       R                   H-  nUR                   H  nS	UR                  ;   d  M  US-  nM     M/     U R                  US5        SnSn	UR                  5       R                   HN  nUR                   H;  nSUR                  ;   d  M  UR                  b  US-  nUR                  c  M6  U	S-  n	M=     MP     U R                  US
5        U R                  U	S5        SnUR                  5       R                   H-  nUR                   H  nSUR                  ;   d  M  US-  nM     M/     U R                  US5        SnUR                  5       R                   H-  nUR                   H  nSUR                  ;   d  M  US-  nM     M/     U R                  US5        g )Nr   rj   rl   TremoloSpannerTremolorA   Turnr   InvertedTurnr0   Shake	Schleifer)rB   rk   rt   rm   rX   notations32ar3   rH   r   r   r   r  upperAccidentallowerAccidental)
r(   rk   rm   re   num_tremolo_spannerscountr   r   
upperCount
lowerCounts
             r*   testOrnamentCTest.testOrnamentC  sX   %2 OOM667  #1%5#67-q1""A]]		)QJE # # 	"""A]]QYY&QJE # # 	"""A]]!QYY.QJE # # 	"

""A]]QYY&((4"a
((4"a
 # # 	Q'Q'""A]]aii'QJE # # 	"""A]]!))+QJE # # 	"r-   c                "   SSK Jn  SSKJn  UR	                  UR
                  5      nU[        R                     nU R                  [        U5      S5        / nU H  nUR                  UR                  5        M      U R                  U/ SQ5        g )Nr   rj   rl   r   )zThis is a text box!zpos 200/300 (lower left)zpos 1000/300 (lower right)zpos 200/1500 (upper left)zpos 1000/1500 (upper right))rB   rk   rt   rm   rX   textBoxes01r   TextBoxrH   r3   r	  content)r(   rk   rm   re   tbsr[   tbs          r*   testTextBoxATest.testTextBoxA  sq    %2OOM556oS1%BJJrzz"  > 	?r-   c                (   SSK Jn  UR                  S5      nUR                  5       nUR	                  [
        R                  5      nU R                  [        U5      S5        UR                  S   R                  5       R                  S   UR                  S   R                  5       R                  S   peU R                  [        U5      US   R                  5       S   5        U R                  [        U5      US   R                  5       S   5        g )Nr   r`   z mozart/k545/movement1_expositionr0   r   r   rA   )rB   ra   rX   r   rv   r   SlurrH   r3   rc   r   r{   getSpannedElementIds)r(   ra   re   sfslursrS  rT  s          r*   testImportSlursATest.testImportSlursA  s    " LL;<YY[%%gll3UQ'##%++A.
0B0B0D0J0J10MB 	Bq!>!>!@!CDBq!>!>!@!CDr-   c                   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        U[        R                     5      S5        U R                  [        U[        R                     5      S5        g Nr   rj   rl   rA   )rB   rk   rt   rm   rX   r   rH   r3   r   	Crescendo
Diminuendor   s       r*   testImportWedgeATest.testImportWedgeA  s\    %2OOM556Qx1123Q7Qx2234a8r-   c                    SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        U[        R                     5      S5        g Nr   rj   rl   r0   )
rB   rk   rt   rm   rX   directions31arH   r3   r   r  r   s       r*   testImportWedgeBTest.testImportWedgeB  s>    %2 OOM778Qx1123Q7r-   c                    SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        U[        R                     5      S5        g )Nr   rj   rl   rb   
rB   rk   rt   rm   rX   r   rH   r3   r   Liner   s       r*   testBracketImportBTest.testBracketImportB  s9    %2OOM556Qw||_-q1r-   c                    SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        U[        R                     5      S5        g r  )
rB   rk   rt   rm   rX   r  rH   r3   r   TrillExtensionr   s       r*   testTrillExtensionImportATest.testTrillExtensionImportA  s<    %2OOM667Q{99:;Q?r-   c                <   SSK Jn  SSKJn  UR	                  UR
                  5      n[        U[        R                     5      nU R                  [        U5      S5        U R                  US   R                  S5        U R                  US   R                  S5        g )Nr   rj   rl   r0   	chromaticrA   
continuous)rB   rk   rt   rm   rX   r   listr   	GlissandorH   r3   	slideType)r(   rk   rm   re   glissess        r*   testGlissandoImportATest.testGlissandoImportA  sy    %2OOM556q**+,Wq)--{;--|<r-   c                    SSK Jn  SSKJn  UR	                  UR
                  SS9nU R                  [        U[        R                     5      S5        g )Nr   rj   rl   r  r  rb   r  r   s       r*   testImportDashesTest.testImportDashes  s=    %2OOM55jOIQw||_-q1r-   c                    SSK Jn  SSKJn  UR	                  UR
                  5      nUR                   Vs/ s H  n[        U5      PM     nnU R                  U/ SQ5        g s  snf )Nr   rj   rl   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   zD#5r   zD-5zA-4r   r   )	rB   rk   rt   rm   rX   rC  r   r2   rH   )r(   rk   rm   re   r6   r  s         r*   testImportGraceATest.testImportGraceA  sR    %2OOM778!"+AQ+ !; 	< ,s   A"c                L   [        5       nU R                  S5      nU R                  [        R                  UR
                  U5        U R                  S5      nUR                  U5        U R                  S5      nU R                  [        R                  UR
                  U5        g )Nz5<barline><bar-style>light-heavy</bar-style></barline>zS<barline><bar-style>light-heavy</bar-style><repeat direction="backward"/></barline>z3<barline><bar-style>wunderbar</bar-style></barline>)r   r+   r;   r   BarExceptionxmlToRepeat)r(   MP	mxBarlines      r*   testBarExceptionTest.testBarException  s    _GGST	#**BNNIFGG I J	 	y! GGQR	#**BNNIFr-   c                    [        5       nU R                  S5      nU R                  [        S5         UR	                  U5        S S S 5        g ! , (       d  f       g = f)Nz<harmony><root><root-step>A</root-step></root><degree><degree-value></degree-value><degree-type>add</degree-type></degree></harmony>zdegree-value missing)r   r+   assertRaisesRegexr   xmlToChordSymbol)r(   r  	mxHarmonys      r*   testChordSymbolExceptionTest.testChordSymbolException-  sK    _GG a b	##$;=ST	* UTTs   A
Ac                *   SSK Jn  UR                  S5      nUR                  5       R	                  [
        R                  5      R                  5       nUR	                  [
        R                  5      nU R                  [        U5      S5        UR	                  [
        R                  5      nU R                  [        U5      S5        UR	                  [
        R                  5      nU R                  [        U5      S5        UR	                  [
        R                  5      nU R                  [        U5      S5        U R                  [        U5      S5        US   nU R                  UR                  S 5        U R                  UR                  S	5        U R                  UR                   S
5        U R                  UR"                  S5        / n	U H-  n
U
R$                  c  M  U	R'                  U
R$                  5        M/     U R                  U	/ SQ5        g )Nr   r`   zdemos/layoutTest.xml*      r  rA   I        `j@     Q@ro         T@g      ^@r
  )rB   ra   rX   r   rv   r   
LayoutBaser   r
  rH   r3   StaffLayout
PageLayoutScoreLayoutdistancetopDistance
leftMarginrightMargin	staffSizer	  )r(   ra   rU  layoutssystemLayoutsstaffLayoutspageLayoutsscoreLayoutssl0sizesre   s              r*   testStaffLayoutTest.testStaffLayout4  s   "LL/0))+001B1BCJJL2263F3FG]+R011&2D2DE\*B/001B1BC[)2.11&2D2DE\*A.Wr*At,%0.#.A{{&Q[[)  	 34r-   c                   SSK Jn  UR                  S5      nUR                  5       R	                  [
        R                  5      R                  5       nU R                  [        U5      S5        UR	                  [
        R                  5      nUS   nU R                  UR                  S 5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        UR	                  [
        R                  5      n/ nU H-  nUR                   c  M  UR#                  UR                   5        M/     U R                  U/ SQ5        g )	Nr   r`   zdemos/layoutTestMore.xmlL   r  r  ro   r	  )rB   ra   rX   r   rv   r   r  r   rH   r3   r
  r  r  r  r  r  r  r	  )	r(   ra   rU  r  r  r  r  r  re   s	            r*   testStaffLayoutMoreTest.testStaffLayoutMoreO  s   "LL34))+001B1BCJJLWr*2263F3FGAt,%0.#.11&2D2DEA{{&Q[[)  	 34r-   c                <   SSK Jn  UR                  S5      nUR                  5       R	                  [
        R                  5      nU R                  [        U5      S5        [        R                  [        R                  4nUR                  5       R	                  U5      nU R                  [        U5      S5        U[        R                     nU R                  [        U5      S5        SnU H  nU[        UR                  5      -  nM     U R                  US5        g)	z-
good test of both dynamics and a PartStaff.
r   r`   zschoenberg/opus19/movement2.mxlrb   2   -   a   N)rB   ra   rX   r   rv   r   DynamicrH   r3   r   r   r   r   r   )	r(   ra   rU  dynAllnotesOrChordsallNotesOrChords	allChordspCountccs	            r*   testCountDynamicsTest.testCountDynamicsb  s     	#LL:;//0@0@AVa(EKK099;99-H-.3ekkN	Y,Bc"**o%F $r-   c                   SSK Jn  [        R                  " 5       S-  nUS-  nUR	                  U5      nUR
                  S   R                  [        R                  5      R                  5       nUR                  5       R                  S   nU R                  UR                  S5        U R                  US   U5        U R                  US   U5        g )Nr   rj   r  ztestTrillOnOneNote.xmlzF#r   )rB   rk   r   getSourceFilePathrX   rc   rv   r   r  rx   r   r   rH   r   ri  )r(   rk   thisDirtestFprU  trillExtensionfSharpTrills          r*   testTrillOnOneNoteTest.testTrillOnOneNotet  s    %**,z933OOF#66{7Q7QRXXZiik''*))40nQ'5nR(+6r-   c                Z   SSK Jn  UR                  S5      nUR                  S   R	                  S5      R                  [        R                  5      R                  5       nUR                  5       S   nU R                  SUR                  5        U R                  UR                  S5        g)	z
lots of lines, including overlapping here; testing that
a line attached to a rest is still there.  Formerly was a problem.

Many more tests could be done on this piece.
r   r`   zluca/gloriarA   c   r  rV   N)rB   ra   rX   rc   r7  rv   r   r  rx   getSpannerSitesrJ   r  rH   idLocal)r(   ra   rU  rbracketAttachedToRests        r*   testLucaGloriaSpannersTest.testLucaGloriaSpanners  s     	#LL'GGAJr"55dii@FFH ! 1 1 3A 6f3;;<.66<r-   c                h   SSK Jn  UR                  S5      nUR                  S   R	                  S5      nUR
                  R                  S5      R                  [        R                  5      R                  5       nU R                  [        U5      S5        U R                  UR                  S5        g )Nr   r`   zdemos/voices_with_chords.xmlrA   rn   z<music21.chord.Chord G4 B4>rp   )rB   ra   rX   rc   r7  rz   getElementByIdrv   r   r   rx   rH   reprr|   )r(   ra   rU  r}   
firstChords        r*   testTwoVoicesWithChordsTest.testTwoVoicesWithChords  s    "LL78WWQZ"YY--c2EEekkRXXZ
j)+HI**C0r-   c                   SS jnU" SS5      nU" 5       nU" SS5      n[        5       nSn[        X#U/5       Hh  u  px[        R                  " U5      n	UR	                  U	5      n
U R                  [        U
5      S5        U R                  U
S   R                  Xg   5        Mj     U" S5      nU" 5       nU" S5      n[        5       nSn[        X#U/5       Hh  u  px[        R                  " U5      n	UR	                  U	5      n
U R                  [        U
5      S5        U R                  U
S   R                  Xg   5        Mj     g)	zG
test that three notes with tuplets start, none, stop
have these types
Nc                L    SnSnU c  X#-   $ Uc  SU  S3nO	SU SU  S3nX$-   U-   $ )Na  
            <note>
            <pitch>
              <step>C</step>
              <octave>4</octave>
            </pitch>
            <duration>56</duration>
            <voice>1</voice>
            <type>quarter</type>
            <time-modification>
              <actual-notes>3</actual-notes>
              <normal-notes>2</normal-notes>
            </time-modification>
            z</note>z<notations><tuplet type="z" /></notations>z<notations><tuplet number="z" type=" )
tupletTyper   mxNBasemxNEnd	mxNMiddles        r*   getNoteByTupletTypeNumber@Test.testParseTupletStartStop.<locals>.getNoteByTupletTypeNumber  s]    G F!''~7
|CST	 2&*M]^  &//r-   startrA   stop)rM  NrN  r   NN)r   	enumerater&   r'   xmlToTupletsrH   r3   r  )r(   rK  n0rS  rT  r  tupTypesr  r   mxNotetupletss              r*   testParseTupletStartStopTest.testParseTupletStartStop  s!   	06 'w2&(&vq1_*rrl+DA]]1%F oof-GS\1-WQZ__hk: , 'w/&(&v._*rrl+DA]]1%F oof-GS\1-WQZ__hk: ,r-   c                F   S[         R                  S-  S-  S-   S3n[        5       n[        R                  " U5      nUR                  U5      nU R                  [        U5      S5        UR                  U5        UR                  nU R                  [        UR                  R                  5      S5        SnU R                  [        UR                  R                  5      U5        U R                  UR                  R                  [        R                  " SS5      5        g)	z?
test that a note with nested tuplets gets converted properly.
z
        <note default-x="347">
        <pitch>
          <step>D</step>
          <octave>5</octave>
        </pitch>
        <duration>g      ?UUUUUU?ak  </duration>
        <voice>1</voice>
        <type>eighth</type>
        <time-modification>
          <actual-notes>9</actual-notes>
          <normal-notes>4</normal-notes>
        </time-modification>
        <stem default-y="-55">down</stem>
        <beam number="1">begin</beam>
        <notations>
          <tuplet bracket="yes" number="1" placement="below" type="start">
            <tuplet-actual>
              <tuplet-number>3</tuplet-number>
              <tuplet-type>eighth</tuplet-type>
            </tuplet-actual>
            <tuplet-normal>
              <tuplet-number>2</tuplet-number>
              <tuplet-type>eighth</tuplet-type>
            </tuplet-normal>
          </tuplet>
          <tuplet number="2" placement="below" type="start">
            <tuplet-actual>
              <tuplet-number>3</tuplet-number>
              <tuplet-type>eighth</tuplet-type>
            </tuplet-actual>
            <tuplet-normal>
              <tuplet-number>2</tuplet-number>
              <tuplet-type>eighth</tuplet-type>
            </tuplet-normal>
          </tuplet>
        </notations>
      </note>
        r0   zL(<music21.duration.Tuplet 3/2/eighth>, <music21.duration.Tuplet 3/2/eighth>)	   N)r   divisionsPerQuarterr   r&   r'   rQ  rH   r3   	xmlToNotenLastr
   rU  r@  r   	fractionsFraction)r(   mxNr  rT  rU  r   expected_tuplet_reprs          r*   testComplexTupletNoteTest.testComplexTupletNote  s     //#5?5IJ  K	&N _s# //&)Wq)
VHHQZZ//0!4!Jajj001-	/1193E3Ea3KLr-   c                   SSK Jn  UR                  S5      n[        UR	                  5       R
                  5      nU R                  [        US   R                  R                  5      S5        Sn[        SS5       H4  nU R                  [        X5   R                  R                  5      U5        M6     U R                  [        US   R                  R                  5      S5        S	n[        S
S5       H4  nU R                  [        X5   R                  R                  5      U5        M6     U R                  [        US   R                  R                  5      S5        / nUSS  HX  nUR                  UR                  R                  S   R                  UR                  R                  S   R                  45        MZ     U R                  U/ SQ5        g )Nr   r`   z$demos/nested_tuplet_finale_test2.xmlz'(<music21.duration.Tuplet 3/2/eighth>,)zL(<music21.duration.Tuplet 3/2/eighth>, <music21.duration.Tuplet 5/2/eighth>)rA   rb   z()zJ(<music21.duration.Tuplet 5/4/16th>, <music21.duration.Tuplet 3/2/eighth>)r     ))NrM  rO  rO  rO  )rN  rN  )rB   ra   rX   r  r   r   rH   r@  r
   rU  r  r	  r  )	r(   ra   rU  nListexpected_tuplet_repr_1_to_6r  expected_tuplet_repr_7_to_12tuplet_pairs_per_noter   s	            r*   testNestedTupletsTest.testNestedTuplets  s   "LL?@QYY[&&'eAh//778B	D(Q#q!AT%("3"3";";<8:  	eAh//778$?)R$q"AT%("3"3";";<9;  	eBi00889B	D !#qA!((!***<*<Q*?*D*DajjFXFXYZF[F`F`)ab  "Y		
r-   c                B   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  5       R                   Vs/ s H  oDR                  R                  S   PM     nnU R                  U Vs/ s H  ofR                  PM     sn/ SQ5        g s  snf s  snf )Nr   rj   rl   )TTTFFF)rB   rk   rt   rm   rX   tupletsImpliedr   r   r
   rU  rH   bracket)r(   rk   rm   re   r   rU  tups          r*   testImpliedTupletTest.testImpliedTuplet1  sx    %2OOM889 34))+2C2CD2CQ::%%a(2CD9#++9;bc E9s   "B7Bc                F   SSK Jn  SnU" U5      n[        5       n[        R                  " S5      Ul        UR                  U5      nUR                  S   nU R                  UR                  R                  S5        U R                  UR                  R                  S5        g )Nr   r'   zA<measure><note><rest/><duration>40320</duration></note></measure>z3/4halfrr   )xml.etree.ElementTreer'   r    r   TimeSignaturelastTimeSignaturexmlMeasureToMeasurenotesAndRestsrH   r
   r  r   )r(   r+   scoreMeasure	mxMeasurerZ   r   measureRests          r*   test34MeasureRestWithoutTag Test.test34MeasureRestWithoutTag;  s    : [|$	\$2259""9-ooa(--22F;--;;SAr-   c                   SSK Jn  UR                  S5      nUR                  S   R	                  S5      R
                  S   nU R                  UR                  R                  S5        U R                  UR                  S5        g)z
Staff 2 of piano part 0 of schoenberg opus19.6 has a quarter rest not
marked as a full measure rest (GOOD) as the last beat of a pickup measure.

It should NOT become a full measure rest
r   r`   zschoenberg/opus19/movement6rA   quarterautoN)
rB   ra   rX   rc   r7  ry  rH   r
   r  fullMeasure)r(   ra   schr:  s       r*   testPickupMeasureRestSchoenberg$Test.testPickupMeasureRestSchoenbergH  se     	#ll89IIaL  #11!4)4/r-   c                <   SSK Jn  SSKJn  UR	                  UR
                  5      nU[        R                     nU R                  [        U5      S5        U R                  US   R                  S5        U R                  US   R                  S5        U R                  US   R                  R                  [        R                  R                  5        U R                  US   R                  S	5        U R                  US   R                  R                  S
5        g )Nr   rj   rl   r  ArA   r   r0   r"   square)rB   rk   rt   rm   rX   r  r   RehearsalMarkrH   r3   r  r   r   	EnclosureNO_ENCLOSURE)r(   rk   rm   re   
rmIterators        r*   testRehearsalMarksTest.testRehearsalMarksU  s    %2OOM778{001
Z!,A..4A..4A,,6655	7A..7A,,66Ar-   c                   SSK Jn  SSK Jn  SSKJn  UR                  UR                  5      n[        U[        R                     5      nU R                  [        U5      S5        US   nUR                  U5        U R                  UR                  5        U R                  UR                  [        R                   R"                  5        UR%                  5       nU R                  [        U5      S5        / SQn['        [)        Xx5      5       H  u  n	u  pU	S:X  a!  U R+                  U
[        R,                  5        O<U R+                  U
[.        R0                  5        U R                  U
R2                  S5        U R                  U
R4                  U5        M     UR                  UR6                  5      n[        U[        R                     5      nU R                  [        U5      S5        US   nUR                  U5        U R                  UR                  5        U R                  UR                  [        R                   R"                  5        UR%                  5       nU R                  [        U5      S	5        / S
Qn['        [)        Xx5      5       H  u  n	u  pU	S:X  a!  U R+                  U
[        R,                  5        O<U R+                  U
[.        R0                  5        U R                  U
R2                  S5        U R                  U
R4                  U5        M     UR                  S5      n[        U[        R                     5      nU R                  [        U5      S5        US   nUR                  UR8                  S   5        U R                  UR                  [        R:                  R<                  5        U R                  UR                  [        R                   R"                  5        UR%                  5       nU R                  [        U5      S5        U R+                  US   [>        R@                  5        U R                  US   R2                  S5        U R                  US   R4                  S5        U R+                  US   [.        R0                  5        U R                  US   R2                  S5        U R                  US   R4                  S5        UR                  S5      n[        U[        R                     5      nU R                  [        U5      S5        US   nUR                  UR8                  S   5        U R                  UR                  [        R:                  R<                  5        U R                  UR                  [        R                   R"                  5        UR%                  5       nU R                  [        U5      S5        / SQn['        [)        Xx5      5       H`  u  n	u  pU R+                  U
[.        R0                  5        U R                  U
RB                  S5        U R                  U
R4                  U5        Mb     g )Nr   rj   r`   rl   rA   r  )ro   rp   rp   rq   zC in octave 4 Quarter Noter   )ro   rp   rp   zB in octave 4 Quarter Notebeachr   r0   z5Chord {E-flat in octave 2 | B-flat in octave 2} Wholero   zE-flat in octave 1 Whole Notedichterliebe_no2)r   g      ?ro   g      ?rp   A3)"rB   rk   ra   rt   rm   rX   r  r  r   	PedalMarkrH   r3   fillr8  	pedalForm	pedalType	PedalTypeSustaingetSpannedElementsrP  zipr   PedalBouncer   r   fullNamer|   r   rc   	PedalFormSymbolr   r   r   )r(   rk   ra   rm   re   pedalspm
spElementsexpectedOffsetsr  r   expectedOffsets               r*   testPedalMarksTest.testPedalMarksc  s   %"2OOM778a--./Va(AY

",,'{'<'<'D'DE**,
Z!,.'0Z1Q'R#A#Av%%b+*A*AB%%b$))4  .JKRYY7 (S OOM556a--./Va(AY

",,'{'<'<'D'DE**,
Z!,)'0Z1Q'R#A#Av%%b+*A*AB%%b$))4  .JKRYY7 (S LL!a--./Va(AY

{'<'<'C'CD{'<'<'D'DE**,
Z!,jmU[[9qM""C	
 	A--r2jmTYY7A//1PQA--r2LL+,a--./Va(AY

{'<'<'C'CD{'<'<'D'DE**,
Z!,5'0Z1Q'R#A#!!"dii0R..5RYY7 (Sr-   c                   SSK Jn  [        R                  " 5       S-  nUS-  nUR	                  U5      nU R                  S[        U[        R                     5      5        U R                  S[        U[        R                     5      5        U R                  SU[        R                     S   R                  5        U R                  SU[        R                     S	   R                  5        U R                  S
[        U[        R                     S   R                  5      5        U R                  S[        U[        R                     S	   R                  5      5        g )Nr   rj   r  z
testNC.xmlr   r0   zaugmented-seventhnonerA   r  zN.C.)rB   rk   r   r/  rX   rH   r3   r   r  NoChordr  r2   chordKindStr)r(   rk   r0  r1  re   s        r*   testNoChordImportTest.testNoChordImport  s!   %**,z9<'OOF#C'"5"5 678C'// 234,7../2<<	>7../2<<	> 	3q'9'((**6,$8 	9Qw%7%&&((4"6 	7r-   c                    SSK Jn  [        5       nSnUS-  nU" U5      nUR                  U5      nU R	                  UR
                  S5        g)z_
m21 name ('dominant-seventh') should be looked up from musicXML aliases
(such as 'dominant').
r   rs  zB<harmony><root><root-step>D</root-step><root-alter>-1</root-alter>z)</root><kind>major-minor</kind></harmony>zminor-major-seventhN)ru  r'   r   r  rH   r  )r(   r+   mpelStrr   css         r*   testChordAliasTest.testChordAlias  sL    
 	;_T<<uI	  +'<=r-   c                    SSK Jn  [        R                  " 5       S-  nUS-  nUR	                  U5      n/ SQn[        U[        R                     U5       H!  u  pgU R                  UR                  U5        M#     g )Nr   rj   r  ztestChordOffset.xml)ro   rq   ro   rq   ro   rq   )
rB   rk   r   r/  rX   r  r   r  rH   r|   )r(   rk   r0  r1  re   r  chr|   s           r*   testChordOffsetTest.testChordOffset  sk    %**,z900OOF#0a 3 34%'JBRYY/'r-   c                    SSK Jn  U" S5      n[        5       nUR                  U5      nU R	                  UR                  5       S5        g )Nr   rs  zt
        <harmony><root><root-step>C</root-step></root>
        <kind>major</kind><inversion>1</inversion></harmony>rA   )ru  r'   r   r  rH   	inversion)r(   r+   r  r  r  s        r*   testChordInversionTest.testChordInversion  sE    : @ A _  #+r-   c                    SSK Jn  U" S5      nU" S5      n[        5       nUR                  U5      S   nUR                  U5        U R	                  UR
                  S5        U R	                  UR                  S5        g )Nr   rs  zM<bracket type="start" line-end="down" end-length="12.5" number="1"></bracket>zL<bracket type="stop" line-end="down" end-length="12.5" number="1"></bracket>g      )@)ru  r'   r   xmlDirectionTypeToSpannersrH   startHeight	endHeight)r(   r+   el1el2r  r]  s         r*   testLineHeightTest.testLineHeight  so    :`a_`_,,S1!4
%%c*))40.r-   c                   SSK Jn  [        R                  " 5       S-  nUS-  nUR	                  U5      nUR
                  S   n[        UR                  5       R                  5      nU R                  US   R                  S   [        R                  5        U R                  US   R                  S   R                  S5        U R                  US   R                  S   [        R                  5        U R                  US   R                  S   R                  S5        U R                  US   R                  S   [        R                  5        U R                  US   R                  S   R                  S5        U R                  US   R                  S   [        R                  5        U R                  US   R                  S   R                  S5        g )	Nr   rj   r  testTab.xmlr  rA   r0   r   )rB   rk   r   r/  rX   rc   r  r   r   r   r   StringIndicationrH   r   r(   rk   r0  r1  scoreguitar_partr   s          r*   testStringIndicationTest.testStringIndication  s~   %**,z9=('kk!n[((*001eAh44Q79W9WXq//2991=eAh44Q79W9WXq//2991=eAh44Q79W9WXq//2991=eAh44Q79W9WXq//2991=r-   c                    SSK Jn  SSKJn  UR	                  UR
                  5      nU[        R                     R                  5       nU R                  [        UR                  5      S5        g )Nr   rj   rl   r   )rB   rk   rt   rm   rX   multipleFingeringsOnChordr   r   rx   rH   r3   r   )r(   rk   rm   re   rU  s        r*   testArticulationsOnChordTest.testArticulationsOnChord  sK    %2OOMCCDekkN  "Q__-q1r-   c                   SSK Jn  [        R                  " 5       S-  nUS-  nUR	                  U5      nUR
                  S   n[        UR                  5       R                  5      nU R                  US   R                  S   [        R                  5        U R                  US   R                  S   R                  S5        U R                  US   R                  S   [        R                  5        U R                  US   R                  S   R                  S5        U R                  US   R                  S   [        R                  5        U R                  US   R                  S   R                  S5        U R                  US	   R                  S   [        R                  5        U R                  US	   R                  S   R                  S	5        g )
Nr   rj   r  r  rA   r  r  r0   r   )rB   rk   r   r/  rX   rc   r  r   r   r   r   FretIndicationrH   r   r  s          r*   testFretIndicationTest.testFretIndication  s~   %**,z9=('kk!n[((*001eAh44Q79U9UVq//2991=eAh44Q79U9UVq//2991=eAh44Q79U9UVq//2991=eAh44Q79U9UVq//2991=r-   c                <   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  S   nUR                  S5      nSnU GH9  n[        U[        R                  5      (       d  M%  U R                  US9   U R                  U[        R                  5        U R                  UR                  S   [        R                   5        US:X  a+  U R#                  UR                  S   R$                  S5        GOUS:X  a*  U R#                  UR                  S   R$                  S5        OUS:X  a*  U R#                  UR                  S   R$                  S5        OUS	:X  a*  U R#                  UR                  S   R$                  S
5        OUS:X  a*  U R#                  UR                  S   R$                  S5        O_US:X  a*  U R#                  UR                  S   R$                  S5        O/US:X  a)  U R#                  UR                  S   R$                  S5        U R'                  US:  5        UR(                   H6  nUR                   H#  n	U R+                  U	[        R                   5        M%     M8     US-  nS S S 5        GM<     g ! , (       d  f       GMO  = f)Nr   rj   rl   rA   )gnote_indexnormalupr0   r   rK  r  r   znon-arpeggiorb   )rB   rk   rt   rm   rX   arpeggio32drc   r7  
isinstancer   GeneralNotesubTestr   r   r   r   ArpeggioMarkrH   r  rC   r   assertNotIsInstance)
r(   rk   rm   re   r6   r   r  r   r   exps
             r*   testArpeggioMarksTest.testArpeggioMarks"  s   %2OOM556GGAJIIaLB"d..// \\k\:))"ekk:))"..*;[=U=UV"a'(():)?)?J$)(():)?)?F$)(():)?)?J$)(():)?)?H$)(():)?)?J$)(():)?)?P$)(():)?)?J$$[1_5XX#$==C 44S+:R:RS $1 &  1$K1 ;:  ;:s    G=J
J	c                   SSK Jn  SSKJn  [        R
                  " [        R                  UR                  UR                  5      5      nUR                  R                  [        R                  5      nU R                  U5        US   n/ n[        UR                   5       H*  u  pxUR#                  U[$        R&                     S   5        M,     [)        XV5       H  u  pU R+                  X5        M     g r  )rB   rk   rt   rm   tcastr   ScorerX   multiStaffArpeggiosspannerBundle
getByClassr   ArpeggioMarkSpannerassertIsNotNonerP  rc   r	  r   r   r  ri  )r(   rk   rm   re   sbspchordsr  r6   spannedr  s              r*   testArpeggioMarkSpannersTest.testArpeggioMarkSpannersK  s    %2FF6<<1R1R!ST__''(G(GHR U$&agg&DAMM!EKK.+, ' r?KGMM'& +r-   c                P   SSK Jn  SSK Jn  SSKJn  UR                  UR                  5      nUR                  5       R                  u  pVU R                  UR                  [        R                  5      5        U R                  UR                  [        R                  5      5        UR                  UR                  5      nUR                  5       R                  u  pVU R                  UR                  R                   UR                  R                   5        UR                  [        R                  5      S   nU R#                  UR$                  R&                  5        UR                  [        R                  5      nU R                  U V	s/ s H  oR$                  R&                  PM     sn	SS/5        UR                  SS5      n
U
R(                  S   [*        R,                     R/                  5       nU
R(                  S   [*        R,                     R/                  5       nUR                  R/                  5       R1                  5       nU R3                  U[        R                  5        U R                  UR$                  R&                  S5        U R                  UR                   S	5        U R                  [5        UR                  5      S5        U R                  U[        R                      V	s/ s H  oR$                  R&                  PM     sn	S
/S-  5        g s  sn	f s  sn	f )Nr   rj   r`   rl   Tzschoenberg/opus19r0   rA   rq   Fr   )rB   rk   ra   rt   rm   rX   hiddenRestsNoFinaler   rz   rC   rv   r   r  hiddenRestsFinalerH   r
   r   rL   r   rj  rc   r   rw   r   rx   r   r3   )r(   rk   ra   rm   re   v1v2restV1restsV2r:  r  rh_lastlh_last
hiddenRests                 r*   testHiddenRestsTest.testHiddenRests\  s<   %"2 OOM==>##..tyy9:..tyy9: OOM;;<##22BKK4M4MN&&tyy1!4667''		2WEW''33WEd|T ll.2))A,v~~.335))A,v~~.335^^((*002
j$))4));;TB1137W^^,a0WTYY=OP=O''33=OPSXRY\]R]^! F  Qs   L2L#c                (   SSK Jn  SnUS-  nUS-  nUS-  nU" U5      n[        US9nUR                  5         U R	                  [        UR                  R                  5      S5        U R	                  [        UR                  R                  S   R                  5      S	5        U R	                  [        UR                  R                  S	   R                  5      S	5        U R	                  UR                  R                  S	   R                  S
5        g)zS
MuseScore expects readers to infer the voice context surrounding
a <forward> tag.
r   rs  zG<measure><note><rest/><duration>20160</duration><voice>1</voice></note>z+<backup><duration>20160</duration></backup>zN<note><rest/><duration>10080</duration><voice>non-integer-value</voice></note>z7<forward><duration>10080</duration></forward></measure>)r{  r0   rA   znon-integer-valueN)
ru  r'   r   rX   rH   r3   r   rz   elementsr{   )r(   r+   r  r{  r  s        r*   testHiddenRestImpliedVoiceTest.testHiddenRestImpliedVoice  s    
 	;Y>>aaJJuI	Y/

RYY--.2RYY--a099:A>RYY--a099:A>))!,//1DEr-   c                8   SSK Jn  SSKJn  UR	                  UR
                  5      nUR                  5       R                  [        R                  5      nU R                  US   R                  SS/5        U R                  US   R                  S/5        UR
                  R                  SS5      nUR	                  U5      nUR                  5       R                  [        R                  5      R                  5       nU R                  UR                  S/5        g )	Nr   rj   rl   rA   r0   r   z1,2zad lib.)rB   rk   rt   rm   rX   multiDigitEndingr   rv   r   r#  assertListEqualnumberRangereplacerx   )r(   rk   rm   r  repeatBracketsnonconformingInputscore2repeatBrackets           r*   testMultiDigitEndingTest.testMultiDigitEnding  s    %2  > >?;;G<Q<QR^A.::QFC^A.::QC@*;;CCE9U!34(;;G<Q<QRXXZ]66<r-   c                F   SSK Jn  SSKJn  UR                  R                  5       nSnU" U5      nUR                  U5      nU R                  [        UR                  5       5      S:H  5        U R                  [        R                  " S5      UR                  S   :H  5        g )Nr   )r  rs  z<harmony><root><root-step>C</root-step></root><kind text="7b5">dominant</kind>
        <degree><degree-value>5</degree-value><degree-alter>-1</degree-alter>
        <degree-type>alter</degree-type></degree></harmony>rA   zG-3r0   )rB   r  ru  r'   xmlToM21r   r  rL   r3   getChordStepModificationsr   Pitchr   )r(   r  r+   r  r  r   r  s          r*   testChordAlterationTest.testChordAlteration  s    $:,,.? uI	  +B88:;q@AE*bjjm;<r-   c                .   SSK Jn  [        R                  " 5       S-  S-  nUS-  nUR	                  U5      n[        UR                  5       R                  5      nU R                  [        US   R                  5      S5        US   R                  S   nU R                  UR                  5        U R                  UR                  S5        U R                  [        UR                  5      S5        U R                  UR                  S   R                  S	5        U R                  UR                  S   R                  S
5        U R                  UR                  S   R                  S5        U R                  UR                  S   R                  S
5        U R                  UR                  S   R                   S5        U R                  US   R"                  S5        U R                  [        US   R                  5      S5        US   R                  S   nU R                  [        UR                  5      S5        U R                  UR                  S   R                   S5        U R                  UR$                  S5        U R                  US   R"                  S5        U R                  [        US   R                  5      S5        US   R                  S   nU R                  [        UR                  5      S5        U R                  UR                  S   R                   S5        U R                  UR                  S   R                   S5        U R                  UR$                  S5        U R                  UR                  S   R                  S5        U R                  UR                  S   R                  S
5        U R                  UR                  S   R                  S5        U R                  [        UR                  SS9S   S   5      S5        g)zM
Tests multiple lyrics in same note but with same number (not stanza change)
r   rj   r  lilypondTestSuitez!61l-Lyrics-Elisions-Syllables.xmlrA   	compositer0   bmiddlerU   E z-der   r  _~zf_g~hbeginendT)r   r  N)rB   rk   r   r/  rX   r  r   r   rH   r3   lyricsrL   isCompositesyllabic
componentsr   elisionBeforer   rawText)	r(   rk   xmlDirfpre   r   ly1ly2ly3s	            r*   testCompositeLyricsTest.testCompositeLyrics  s(    	&))+j8;NN99OOBQYY[&&' 	U1X__-q1Ahooa ({3S^^,a0*//5*33X>*//5*33X>*88#> 	q,U1X__-q1Ahooa S^^,a0*88"=e, 	q,U1X__-q1Ahooa S^^,a0*88#>*88#>g.*33W=*33X>*33U;QXXdX3A6q9:A>r-   c                   SSK Jn  SSK Jn  SSKJnJn  UR                  UR                  5      nU[        R                     R                  5       nU R                  UR                  R                  S5        UR                  UR                  5      nU[        R                      R                  5       nU R                  UR                  R"                  S5        UR                  UR$                  5      nUR'                  5        Vs/ s H0  oR(                  (       d  M  UR                  R"                  c  M.  UPM2     n	nU R                  [+        U	5      S5        U R                  [-        [/        S U	 5       5      5      [0        R2                  /5        UR                  S	5      nUR'                  5        Vs/ s H0  oR(                  (       d  M  UR                  R"                  c  M.  UPM2     n	nU R                  [+        U	5      S
5        U R                  [5        [/        S U	 5       5      [6        S9[        R8                  [        R:                  [        R                  [0        R2                  /5        U	 Vs/ s H  nSUR<                  ;   d  M  UPM     n
nU R                  U
S   R                  R"                  S5        UR                  UR>                  5      nU[@        RB                     R                  5       nU R                  UR                  RD                  S
5        U R                  URF                  S5        g s  snf s  snf s  snf )Nr   rj   r`   )rm   r   rb   r  r   c              3  8   #    U  H  n[        U5      v   M     g 7fr%   r  .0r   s     r*   	<genexpr>-Test.testDirectionPosition.<locals>.<genexpr>  s     6"T"XX   r  r  c              3  8   #    U  H  n[        U5      v   M     g 7fr%   r  r*  s     r*   r,  r-    s     8-BtBxx-r.  r   r  iabove)$rB   rk   ra   rt   rm   r   rX   mozartTrioK581Excerptr   r%  rx   rH   r   	relativeYr  r   r  	relativeXr   r   hasStyleInformationr3   r  r   r   r   sortedr@  r  r  r  tabTestr   r6  r   	placement)r(   rk   ra   rm   r   re   dynsegr   positionedEls
crescendosmetros               r*   testDirectionPositionTest.testDirectionPosition  sx   %"= OOI;;<  !''),,a0 OOM<<=o##%,,b1 OOM99:&'iik 0k5K5K"" k 0]+Q/6667''(	
 LL!&'iik 0k5K5K"" k 0]+R038-88dC!4!4h6F6FHbHbc	
 $1N=RK2::4Mb=
NA,,66; OOI--.%%%&,,...3'2100 Os0   MM7M7MM(M9MMc           
     F   SSK Jn  [        R                  " 5       S-  S-  nUR	                  US-  5      nU[
        R                     R                  5       nU R                  UR                   Vs/ s H  oUR                  PM     sn/ SQ5        U R                  UR                   Vs/ s H  oUR                  PM     snUR                  5       R                  5       R                   Vs/ s H  oUR                  PM     sn5        U[        R                     nU R                  U Vs/ s H  owR                  PM     sn/ SQ5        U R                  U Vs/ s H  owR                   PM     sn/ SQ5        U R                  U Vs/ s H  owR"                  PM     sn/ S	Q5        U R                  U VVs/ s H,  owR%                  5        Vs/ s H  oUR                  PM     snPM.     snnS
/SS/SS/SS//5        g s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snnf )Nr   rj   r  r  z33d-Spanners-OctaveShifts.xml)	r   r   A6r  B2r   r   B3r   )FFFF)15ma15mb8va8vb)r0  belowr0  rG  r@  r  rA  r   rB  r   )rB   rk   r   r/  rX   r   rw   rx   rH   r   r   r~  r   r   r   transposingr  r7  r  )r(   rk   xml_dirre   r   r6   ottava_objsr  s           r*   testImportOttavaTest.testImportOttava  s   %**,z9<OOOOG&EEFfnn##%'(yy1y!y1B	

 	'(yy1y!y1'('8'8':'B'B'D'L'LM'L!'LM	
 '$/0Kq]]K0(	
 	()[VV[)*	
 	"-.+Q[[+.0	
 	ITUA(<(<(>?(>1(>?U VdD\D$<$>		
+ 2
 2M 1 * / @Us<   0G:(G?)H
'H	HH2H
	HH
H
c                X   SSK Jn  [        5       nSUl        [        R
                  " S5      nU R                  [        UR                  5      S5        U" S5      nUR                  XCS9  U R                  [        UR                  5      S5        U R                  UR                  S5        g )	Nr   rs  r  rY  rA   zR<note><pitch><step>D</step><octave>6</octave></pitch><duration>3</duration></note>)inputM21T)ru  r'   r   	divisionsr
   r;  rH   r3   rU  xmlToDurationlinked)r(   r+   r  dmxNoteNoTypes        r*   testClearingTupletsTest.testClearingTuplets6  s    :_e$QYY+ < =
2QYY+4(r-   c                `   SSK Jn  Sn[        5       nU" U5      nUR                  U5      nU R	                  U[
        R                  5        U R                  UR                  S5        UR                  SS5      nUR                  SS5      nUR                  S	S
5      n[        5       nU" U5      nSnU R                  [        U5         UR                  U5      nS S S 5        U R	                  W[
        R                  5        U R                  UR                  S5        g ! , (       d  f       NK= f)Nr   rs  a  
        <score-part id="P4"><part-name>Tambourine</part-name>
        <part-abbreviation>Tamb.</part-abbreviation>
        <score-instrument id="P4-I55">
            <instrument-name>Tambourine</instrument-name>
        </score-instrument>
        <midi-instrument id="P4-I55">
           <midi-channel>10</midi-channel>
           <midi-unpitched>55</midi-unpitched>
        </midi-instrument>
        </score-part>
        r  
TambourineCabasazTamb.zCab.5570z&69 does not map to a valid instrument!E   )ru  r'   r    getDefaultInstrumentr   r   rW  rH   percMapPitchr  assertWarnsRegexr   UnpitchedPercussion)r(   r+   	scorePartrZ   rU   tmbr[   unps           r*   testImportUnpitchedPercussion"Test.testImportUnpitchedPercussionC  s   :	 \m%%k2c:#8#89))2. %%lH=	%%gv6	%%dD1	\m6""?C8))+6C 9c:#A#AB))2. 98s   D
D-c                ,   SSK Jn  [        R                  " 5       S-  S-  nUR	                  US-  5      nU[
        R                     R                  5       nU R                  UR                  [
        R                  R                  R                  5        g )Nr   rj   r  r  z&46d-PickupMeasure-ImplicitMeasures.xml)rB   rk   r   r/  rX   r   rw   rx   ri  
showNumberenums
ShowNumberNEVER)r(   rk   rI  re   r   s        r*   testImportImplicitMeasureNumber$Test.testImportImplicitMeasureNumberd  sk    %**,z9<OOOOG&NNOfnn##%allFLL$;$;$A$ABr-   c                6   [         R                  " S5      n[        R                  " [        R
                  " S5      [        R                  " US9/5      n[        5       nSUl	        UR                  U5        U R                  [        5         UR                  U5        S S S 5        U R                  UR                  S5        [         R                  " S5      n[        R                  " [        R
                  " S5      [        R                  " US9/5      n[        5       nSUl	        UR                  U5        UR                  U5        U R                  UR                  S5        [         R                  " S5      n[        R                  " [        R
                  " S5      [        R                  " US9/5      n[        5       nSUl	        UR                  U5        UR                  U5        U R                  UR                  S	5        g ! , (       d  f       GNr= f)
Ng@z6/8r	   g      5@g      8@g      	@g      8@r   g      9@)r
   r;  r   rw   r   rv  r   r   r    lastMeasureOffsetsetLastMeasureInfoassertWarnsr   adjustTimeAttributesFromMeasurerH   )r(   rR  r   rZ   s       r*   #testAdjustTimeAttributesFromMeasure(Test.testAdjustTimeAttributesFromMeasurel  s   k*NNE//6		18MNO\#
a o...q1 /--t4 e$NNE//6		18MNO\#
a 
**1---v6c"NNE//6		18MNO\#
a 
**1---t4) /.s   H		
Hc           	     ,   SSK Jn  SSKJn  UR	                  UR
                  5      nU R                  [        UR                  5      S5        U R                  U[        R                     5        U[        R                     R                  5       nS GHt  nUR                  U   nU R                  Xd5        U R                  [        U[        R                     5      S5        U R                  [        U[         R"                     5      S5        U[         R"                     u  pxn	U R                  U[$        R&                     5        U[$        R&                     R                  5       n
U R                  U
R(                  S5        U R                  U
R*                  S5        U R                  U[$        R&                     5        U[$        R&                     R                  5       nU R                  UR(                  S	5        U R                  UR*                  S
5        U R-                  U	[$        R&                     5        U R                  U	[$        R.                     R1                  S
5      5        U	[$        R.                     R1                  S
S
5      R                  5       nU R                  UR2                  S5        U[4        R6                     nU R                  USU SU S35        U R                  [        U5      S5        Uu  pUR8                  S:X  a  XpU R                  [;        U5      U/5        U R                  [;        U5      U	/5        U[        R                      Vs/ s H  nUR<                  PM     nnU R                  U/ SQ5        [>        R@                  [         RB                     " U5      RE                  5       nU[        R                      Vs/ s H  nUR<                  PM     nnU R                  U/ SQ5        GMw     g s  snf s  snf )Nr   rj   r   r0   )r   rA   r   rM  ro   r  r   finalzPart :z has no RepeatBrackets)Gr  r   )rv  r  rv  r   )#rB   rk   rt   r   rX   pianoRepeatEndingsrH   r3   rc   rL   r   r`  rx   rJ   r   r   r   rw   r   rd   	directionr|   rC   r   getElementsByOffsetr  r   r#  r   r  r   r   ExpanderPartprocess)r(   rk   r   re   sgp_numr6   r}   r   m3repeat_start
repeat_end	final_barrepeat_bracket_iteratorrb1rb2r   p_notes
p_expandedp_notes2s                       r*   testPianoStaffWithRepeatEndings$Test.testPianoStaffWithRepeatEndings  s   %.OOI889QWWq)&++,-v  !'')EAMM! S499.2S6>>!23Q76>>*JBBOOBszzN+cjj>//1L\33W=\00#6OOBszzN+CJJ--/JZ1159Z..4R

^,OOBs{{O??DE3;;;;CEKKMIY^^W5 '((=(=&>#OO3uUG1QCG]5^_S!891=.HCzzQST#Y-T#Y-'(|4|!qvv|G4Wo65a8@@BJ(2499(=>(=1(=H>X';<G < 5 ?s   $PPrF  N)returnrx  )V__name__
__module____qualname____firstlineno__r+   r7   r>   rQ   r]   rg   r   r   r   r   r   r   r   r   r   r   r   r  r  r&  r+  r2  r=  r@  rE  rZ  rf  rl  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r4  r<  rB  rV  rb  rj  rp  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r=  rK  rT  rc  rj  rq  r  __static_attributes__rF  r-   r*   r"   r"   $   s   %
D
/Eb
4+X"	R1&; 
?	4
(8,J(+"" (9"- +L(BF@Y8)&	<
SA!H	-:<,,8#t?E"982@=2<G +565&%$7="1<;|8Mt
<dB0BI8V7(>
0,	/>*2>*'%R'"(_TF&=&=+?Z)3V"
H)/BC5:,=r-   r"   __main__)+
__future__r   r^  typingr  unittestru  etreeElementTreer&   rB   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   music21.musicxml.xmlToM21r   r   r   r   r    TestCaser"   r  mainTestrF  r-   r*   <module>r     s    "    " " !                      
Q=8 Q=h4 zT r-   