
    3j                      d dl mZ d dlZd dlZd dlZd dlmc mZ	 d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d d	l
mZ d d
l
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
m Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&  G d dejN                        Z(e)dk(  rd dl
Z
 e
jT                  e(       yy)    )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                     e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdTdFZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOdN ZPdO ZQdP ZRdQ ZSdR ZTyS)UTestc                ,    t        j                  |      S N)ET
fromstring)selfelTexts     K/DATA/.local/lib/python3.12/site-packages/music21/musicxml/test_xmlToM21.pyELzTest.EL%   s    }}V$$    c                f    d}|D ]  }|t        |      dz   z  } |dt        |      dz
   }|dz  }|S )zv
        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)   pitchOutzTest.pitchOut(   sG    
 A3q6D= C !CHqL!s

r+   c                f    t               }d|_        | j                  t        |j                         y )Nz<score-timewise />)r   xmlTextassertRaisesr   parseXMLText)r'   MIs     r)   testParseSimplezTest.testParseSimple4   s&    .
12??Cr+   c                :   d}t               }| j                  |j                         | j                  |j                         | j                  |j                         | j                  |      }t        j                         }| j                  t        |j                        d       | j                  d|j                  d          t               }|j                  ||       | j                  |j                         | j                  |j                         | j                  |j                         | j                  d|j                         d}t               }| j                  |      }t        j                         }|j                  ||       | j                  |j                         | j                  |j                         | j                  |j                         | j                  d|j                         | j                  d|j                         y	)
zI
        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assertEqualr1   softwareassertInprocessEncoding
assertTrue)r'   enc1mxl_importerencodingmds        r)   test_processEncodingzTest.test_processEncoding9   s    ()<<=AAB??@774= R[[)1-iQ0')$$Xr2;;<@@A>>?,bkk: ()774= $$Xr2<<=AAB>>?nbkk26Dr+   c                2   | j                  d      }| j                  d      }t        ||      }d|_        d}| j                  t              5 }|j                          d d d        | j                  t        j                        |       y # 1 sw Y   /xY w)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    partIdr8   r   parserD   r0   	exception)r'   rP   rO   ppmsgerrors         r)   testExceptionMessagezTest.testExceptionMessagej   sy    ggUVabv;?	W675HHJ 8U__-s3 87s   BBc                    ddl m} |j                  d      }|j                  D ]0  }|t        j
                     }| j                  t        |      d       2 y )Nr   corpuszk80/movement3   )r>   r[   rS   partsr   RepeatrD   r1   )r'   r[   sr4   posts        r)   testBarRepeatConversionzTest.testBarRepeatConversionv   sD    " LL)ASZZ=DSY* r+   c                j   ddl m} ddlm} |j	                  |j
                        }|j                  d   j                  t        j                        j                         }| j                  |j                                | j                  |j                  D cg c]  }|j                   c}ddg       | j                  |j                  d   D cg c]  }|j                    c}g d       | j                  |j                  d   D cg c]  }|j                    c}g d       | j                  |j                  d   D cg c]  }|j                    c}g d       | j                  |j                  d   D cg c]  }|j                    c}g d       y c c}w c c}w c c}w c c}w c c}w )	Nr   	convertertestPrimitiverQ   2)              ?       @      @r=   )rh   rj         @rk   g      @)r>   rd   music21.musicxmlrf   rS   voiceDoubler]   getElementsByClassr   MeasurefirstrH   	hasVoicesrD   voicesidoffset)r'   rd   rf   r_   m1ves          r)   
testVoiceszTest.testVoices   s?   %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!F&F+>F0c                6   ddl m} ddlm} |j	                  |j
                        }| j                  t        |t        j                           d       | j                  t        |j                         j                  t        j                              d       y )Nr   rc   re      )r>   rd   rm   rf   rS   spannersSlurs33crD   r1   r   Spannerrecursero   r'   rd   rf   r_   s       r)   testSlurInputAzTest.testSlurInputA   sf    %2OOM::;Qw/0!4 	QYY[;;GOOLMqQr+   c                   ddl m} ddlm} |j	                  |j
                        }| j                  t        |j                        d       | j                  t        |j                  d   t        j                           d       | j                  t        |j                  d   t        j                           d       | j                  |j                  d   t        j                         | j                  |j                  d   t        j                         |t        j                     }| j                  t        |      d       | j                  |d   |d          | j!                  |d   |d          y )Nr   rc   re   r.   r=   )r>   rd   rm   rf   rS   pianoStaff43arD   r1   r]   r   NoteassertIsInstancer   	PartStaffr   KeySignatureassertIsNot)r'   rd   rf   r_   keySigss        r)   testMultipleStavesPerPartAz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   ddl m} ddlm} |j	                  |j
                        }| j                  t        |j                        d       | j                  t        |j                  d   t        j                           d       | j                  t        |j                  d   t        j                           d       | j                  t        |j                  d   t        j                           d       | j                  t        |j                  d   t        j                           d       y )Nr   rc   	testFilesr.      r=      )r>   rd   rm   r   rS   moussorgskyPromenaderD   r1   r]   r   r   r   Chord)r'   rd   r   r_   s       r)   testMultipleStavesPerPartBzTest.testMultipleStavesPerPartB   s    %.OOI::;QWWq)QWWQZ		23R8QWWQZ		23Q7QWWQZ45r:QWWQZ45r:r+   c                   ddl m} |j                  d      }| j                  t	        |j
                        d       | j                  t	        |j                  t        j                              d       t               }|j                         D ]  }|j                  t        |              | j                  t	        |      t	        |j                                      y )Nr   rZ   zschoenberg/opus19/movement2r.   )r>   r[   rS   rD   r1   r]   ro   r   r   setr~   addrt   )r'   r[   r_   setElementIdsels        r)   testMultipleStavesPerPartCzTest.testMultipleStavesPerPartC   s    "LL67QWWq)Q11&2B2BCDaH ))+Bbf% ]+S-=>r+   c                ,   ddl m} ddlm} |j	                  |j
                        }| j                  t        |j                  t        j                              d       | j                  t        |j                         j                  t        j                              d       |j                  d   j                  t        j                        j!                         }|j!                         }|j#                  |d      }| j                  |d       y )Nr   rc   re   r.   T)returnSpecialhighestTime)r>   rd   rm   rf   rS   mixedVoices1arD   r1   ro   r   r   r~   r   Barliner]   rp   lastelementOffset)r'   rd   rf   r_   lastMeasurelastElement
lastOffsets          r)   #testMultipleStavesInPartWithBarlinez(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                   ddl m} ddlm} |j	                  |j
                        }| j                  t        |j                  t        j                              d       |t        j                     d   }| j                  t        |j                  t        j                              d       |t        j                     d   }| j                  |j                  D cg c]  }|j                   c}g d       |j!                  d       | j                  |j                  D cg c]  }|j                   c}g d	       y c c}w c c}w )
Nr   rc   re   r.   r=   )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)r>   rd   rm   rf   rS   pianoStaffWithOttavarD   r1   ro   r   r   r   Ottavarp   pitchesnameWithOctavetoWrittenPitch)r'   rd   rf   r_   ps0m0r4   s          r)   "testMultipleStavesInPartWithOttavaz'Test.testMultipleStavesInPartWithOttava   s	   %2OOM>>?Q11&2B2BCDaH  !!$S33GNNCDaH #')zz2z!Qz2?	

 	
&')zz2z!Qz2?	
 3 3s   E%Ec                B   ddl m} ddlm} |j	                  |j
                        }| j                  t        |j                         j                        d       |j                  dd      }| j                  t        |j                         j                        d       y )Nr   rc   re   r.      )r>   rd   rm   rf   rS   spanners33aassertGreaterEqualr1   flattenspannersmeasuresrD   )r'   rd   rf   r_   exs        r)   testSpannersAzTest.testSpannersA   sr    %2OOM556AIIK$8$8 91= ZZ1 	RZZ\223Q7r+   c                   ddl m} ddlm} |j	                  |j
                        }| j                  t        |t        j                           d       |j                  d   }|j                  t        j                        d   }| j                  t        |j                  t        j                              d       |j                  t        j                        d   }| j                  t        |j                  t        j                              d       |j                  t        j                        }| j                  |D cg c]  }|j                   c}g d       y c c}w )Nr   rc   re   r   r=   )ri         ?      @)r>   rd   rm   rf   rS   textExpressionsrD   r1   r   TextExpressionr]   ro   r   rp   ru   )	r'   rd   rf   r_   p1rv   m2teStreamtes	            r)   testTextExpressionsAz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                r   ddl m} |j                  d      }|j                  d   }|j	                  t
        j                        D ]  }|j                         j                  D ]  }|j                  j                  dv s|j                  j                   d|j                  j                   }t        j                  |      }d|j                   _        d|j                   _        d|j                   _        d	|j                   _        d
|j                   _        |j-                  |j.                  |         y )Nr   rZ   bwv66.6)B
   boldcenter	rectanglei)r>   r[   rS   r]   ro   r   rp   r   notesr   namer   r
   quarterLengthr   r   r   fontSize
fontWeightjustify	enclosure	absoluteYinsertru   )r'   r[   r_   r4   mnrV   r   s           r)   testTextExpressionsCz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                `   ddl m} |j                  d      }|j                  d   }|j	                  t
        j                        dd  D ]c  }dD ]\  }t        j                  |      }d|j                  _
        d|j                  _        d	|j                  _        |j                  ||       ^ e y )
Nr   rZ   r   r=   )r   rl   r   r   r   )r>   r[   rS   r]   ro   r   rp   r   r   r   r   r   r   r   )r'   r[   r_   r4   r   posr   s          r)   testTextExpressionsDzTest.testTextExpressionsD+  s    "LL#GGBK%%fnn5ab9A! //4&,##+ %0"b! " :r+   c                   dd l }t        j                         }t        d      D ]v  }t        j                  |dz         }|j                  t        j                  d             |j                  t        j                  d             |j                  |       x |j                  t        j                        D ]  }t        d	      D cg c]  }|d
z  	 }}|j                  |       |d d }|D ]\  }t        j                  |      }d|j                  _        d|j                  _        d|j                  _        |j%                  ||       ^  y c c}w )Nr   r\   r=   )numberT)isNewwholetype   g      ?   r   r   r   )randomr   Streamrangerp   appendr   SystemLayoutr   Restro   shuffler   r   r   r   r   r   r   )	r'   r   r_   ir   xoffsetsor   s	            r)   testTextExpressionsEzTest.testTextExpressionsE9  s   MMOqAa!e,AHHV((t45HHTYYG,-HHQK	 
 %%fnn5A).r3Aq4xG3NN7#bqkG //2&,##+ %0"B 	 63s   Ec                @   ddl m} ddlm} |j	                  |j
                        }| j                  t        |t        j                           d       | j                  t        |t        j                           d       | j                  t        |t        j                           d       |j	                  |j                        }| j                  t        |t        j                           d       | j                  t        |t        j                           d       y )Nr   re   rc   r=   r.   )rm   rf   r>   rd   rS   repeatExpressionsArD   r1   r   SegnoFineDalSegnoAlFinerepeatExpressionsBCodaDaCapoAlCodar'   rf   rd   r_   s       r)   testImportRepeatExpressionsAz!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                >   ddl m} |j                  dd      }| j                  t	        |t
        j                           d       |j                  d   j                  dd      }|j                  t
        j                        }| j                  t	        |      d       y )	Nr   rZ   	opus74no1r      H   M   r.   )
r>   r[   rS   rD   r1   r   RepeatBracketr]   r   ro   )r'   r[   r_   sSub
rbSpannerss        r)   testImportRepeatBracketAzTest.testImportRepeatBracketA^  s}    "LLa(Qw4456:
 wwqz""2r* ,,W-B-BC
Z!,r+   c                ,   ddl m} ddlm} |j	                  |j
                        }| j                  t        |j                        d       | j                  t        |j                  d   j                  t        j                        d   j                        d       |j	                  |j                        }| j                  t        |j                        d       | j                  t        |j                  d   j                  t        j                        d   j                        d       |j	                  |j                        }| j                  t        |j                        d       | j                  t        |j                  d   j                  t        j                        d   j                        d       | j                  t        |j                  d   j                  t        j                        d   j                        d       y )Nr   re   rc   r.   r=   )rm   rf   r>   rd   rS   r   rD   r1   r]   ro   r   rp   rs   mixedVoices1bmixedVoices2r  s       r)   testImportVoicesAz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                    ddl m} ddlm} |j	                  |j
                        }|t        j                     }| j                  t        |      d       y )Nr   re   rc   r   )
rm   rf   r>   rd   rS   metronomeMarks31cr   TempoIndicationassertGreaterr1   )r'   rf   rd   r_   mmss        r)   testImportMetronomeMarksAzTest.testImportMetronomeMarksA  s@    2%OOM;;<%%&3s8Q'r+   c                   ddl m} |j                  d      }| j                  t	        |j                         t        j                           d       |j                  D ]  }|j                  d      t        j                     j                         }| j                  |j                         | j                  |j                  d       | j                  |j                  t        j                   d              y)zX
        Import sound tempo marks as MetronomeMarks but only set numberSounding
        r   rZ   zbach/bwv69.6.xmlr  `   ri   N)r>   r[   rS   rD   r1   r   r   MetronomeMarkr]   measurerq   assertIsNoner   numberSoundingreferentr
   Duration)r'   r[   r_   r4   mms        r)   testImportMetronomeMarksBzTest.testImportMetronomeMarksB  s     	#LL+,QYY[)<)<=>BA1e11288:Bbii(R..3R[[(*;*;C*@A	 r+   c                B   ddl m} |j                  d      }| j                  t	        |j
                  j                         t        j                           d       | j                  t	        |j
                  j                         t        j                           d       y)z<
        Import tempo into only the first PartStaff
        r   rZ   zdemos/two-partsr=   N)
r>   r[   rS   rD   r1   r]   rq   r   r  r   )r'   r[   r_   s      r)   testImportMetronomeMarksCzTest.testImportMetronomeMarksC  sj     	#LL*+QWW]]_U-@-@ABAFQWW\\^E,?,?@A1Er+   c                R    ddl m} ddlm} |j	                  |j
                        }y )Nr   re   rc   )rm   rf   r>   rd   rS   graceNotes24a)r'   rf   rd   unused_ss       r)   testImportGraceNotesAzTest.testImportGraceNotesA  s    2%??=#>#>?r+   c                J   ddl m} ddlm} t	        j
                  d      }d|_        d|_        t	        j
                  d      }d|_        t        j                  ||g      }d	|_
        |j                         }|j                  |      j                  d
      }|j                  |      }|j                         j                  d   }	| j!                  |	j#                  |	j$                  d         d       | j!                  |	j#                  |	j$                  d         d       y )Nr   )m21ToXmlrc   f3diamonddownc4noStemr.   zutf-8r=   )rm   r.  r>   rd   r   r   noteheadstemDirectionr   r   r   GeneralObjectExporterrS   decoder   r   rD   getStemDirectionr   )
r'   r.  rd   n1n2cGEXxmlinputStreamchordResults
             r)   testChordalStemDirImportzTest.testChordalStemDirImport  s     	.% YYt_!YYt_#KKR!,,.iil!!'*  ooc*!))+11!4 	55k6I6I!6LMvV55k6I6I!6LMxXr+   c                   ddl m} ddlm} |j	                  |j
                        }|j                  t        j                        }| j                  t        |      d       |d   }| j                  |j                  d       | j                  |j                         |d   }| j                  |j                  d       | j                  |j                         y )Nr   re   rc   r.   liner=   brace)rm   rf   r>   rd   rS   staffGroupsNested41dro   r   
StaffGrouprD   r1   symbolrH   barTogether)r'   rf   rd   r_   staffGroupssg1sg2s          r)   testStaffGroupsAzTest.testStaffGroupsA  s    2%OOM>>?**6+<+<=[)1-!nV,(!nW-(r+   c                   ddl m} ddlm} |j	                  |j
                        }|j                  t        j                        }| j                  t        |      d       | j                  |d   j                  d       | j                  |d   j                  d       | j                  |d   j                  j                  d       y )Nr   re   rc   r=   rC  T)rm   rf   r>   rd   rS   r   ro   r   rE  rD   r1   rF  assertIsrG  r   hideObjectOnPrint)r'   rf   rd   r_   sgss        r)   testStaffGroupsPianozTest.testStaffGroupsPiano  s    2%OOM778""6#4#45S1%Q0c!f(($/c!fll44d;r+   c                   ddl m} ddlm} |j	                  |j
                        }|j                  d   j                         j                  t        j                        j                         }|j                  d   j                         j                  t        j                        j                         }| j                  t        |j                        d       | j                  t        |j                        d       y )Nr   re   rc   r=   <music21.interval.Interval M-2>z<music21.interval.Interval M-6>)rm   rf   r>   rd   rS   transposingInstruments72ar]   r   ro   r   
Instrumentrq   rD   r0   transposition)r'   rf   rd   r_   i1i2s         r)   testInstrumentTranspositionAz!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                	   ddl m} ddlm} |j	                  |j
                        }|j                  d   t        j                     j                         }| j                  t        |      d       |d   }| j                  |t        j                         |j                  d   t        j                     j                         }| j                  t        |      d       |d   }| j                  |t        j                         |j                  d   t        j                     j                         }| j                  t        |      d       |d   }	| j                  |	t        j                         | j                  t!        |d   j"                        d       | j                  t!        |d   j"                        d       | j                  t!        |d   j"                        d	       | j                  t!        |d   j"                        d
       | j                  t!        |d   j"                        d       | j                  t!        |	j"                        d       | j                  | j%                  |j                  d   j'                         j(                        d       | j                  | j%                  |j                  d   j'                         j(                        d       | j                  | j%                  |j                  d   j'                         j(                        d       | j+                  |j                  d   j'                         j,                         |j/                  d      }
| j                  |
j                  d   j'                         j(                  D ch c]  }|j0                   c}dh       | j                  |
j                  d   j'                         j(                  D ch c]  }|j0                   c}dh       | j                  |
j                  d   j'                         j(                  D ch c]  }|j0                   c}dh       |j3                         }| j                  |j'                         j(                  D ch c]  }|j0                   c}dh       y c c}w c c}w c c}w c c}w )Nr   re   rc   r   r=   r.   Nonez<music21.interval.Interval P-5>z<music21.interval.Interval P1>rR  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   )rm   rf   r>   rd   rS   transposing01r]   r   rT  r   rD   r1   r   OboeClarinetHornr0   rU  r5   r   r   r?   atSoundingPitchtoSoundingPitchr   chordify)r'   rf   rd   r_   iStream1rV  iStream2rW  iStream3i3	sSoundingr4   sChordss                r)   testInstrumentTranspositionBz!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   -R==SS Sc                    ddl m} ddlm} |j	                  |j
                        }|t        j                     }| j                  t        |      d       y )Nr   rc   re      )
r>   rd   rm   rf   rS   r[  r   rT  rD   r1   )r'   rd   rf   r_   
instStreams        r)   testInstrumentTranspositionCz!Test.testInstrumentTranspositionCE  sB    %2OOM778z,,-
 	Z!,r+   c                <   ddl m} |j                  d      }| j                  t	        |t
        j                           d       |t
        j                     D cg c]  }|j                   }}| j                  |g d       |t
        j                     D cg c]  }t        |j                                }}| j                  |g d       |t
        j                     D ch c]  }t        |j                         }}| j                  |h d       |j                  d      }| j                  t	        |t
        j                           d	       |j                  d
      }| j                  t	        |t
        j                           d       y c c}w c c}w c c}w )Nr   rZ   z%leadSheet/berlinAlexandersRagtime.xmlr   )majordominant-seventhrn  rn  rn  rn  ro  rn  ro  rn  ro  rn  ro  rn  ro  rn  ro  rn  rn  )F3C3rp  B-2rp  rq  G2rq  rq  rp  rq  rp  F2rr  rt  rp  rq  rp  rq  >   B-CFC7F7G7zmonteverdi/madrigal.3.12.xml
   zleadSheet/fosterBrownHair.xml(   )r>   r[   rS   rD   r1   r   ChordSymbol	chordKindr0   rootfigure)r'   r[   r_   hmatchs        r)   testHarmonyAz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                   ddl m} t        j                         dz   }|j	                  |d      }|j
                  d   }d}|j                         j                  D ]'  }|j                  D ]  }d|j                  v s|dz  } ) | j                  |d       d}|j
                  d	   j                         j                  D ]'  }|j                  D ]  }	d
|	j                  v s|dz  } ) | j                  |d       y )Nr   rc   z/beethoven/opus133.mxlmusicxmlformatTrillr=   6   r.   TechnicalIndication)r>   rd   r   getCorpusFilePathrS   r]   r~   r   r   classesrD   r   )
r'   rd   	beethovenr_   r   
countTrillr   rx   countTechnicalas
             r)   x_testOrnamentAndTechnicalzTest.x_testOrnamentAndTechnicalo  s    %,,.1II	OOIjO9WWQZ
##A]]aii'!OJ # $ 	R( ##%++A__(AII5"a'N % , 	+r+   c                   ddl m} ddlm} |j	                  |j
                        }t        |d         }| j                  |d       d}|j                         j                  D ]'  }|j                  D ]  }d|j                  v s|dz  } ) | j                  |d       d}|j                         j                  D ]'  }|j                  D ]  }d|j                  v s|dz  } ) | j                  |d       d}|j                         j                  D ]'  }|j                  D ]  }d	|j                  v s|dz  } ) | j                  |d       d}d}	|j                         j                  D ]E  }|j                  D ]4  }d|j                  v s|j                  |dz  }|j                  0|	dz  }	6 G | j                  |d
       | j                  |	d       d}|j                         j                  D ]'  }|j                  D ]  }d|j                  v s|dz  } ) | j                  |d       d}|j                         j                  D ]'  }|j                  D ]  }d|j                  v s|dz  } ) | j                  |d       y )Nr   rc   re   TremoloSpannerTremolor=   Turnr{   InvertedTurnr.   Shake	Schleifer)r>   rd   rm   rf   rS   notations32ar1   rD   r~   r   r   r  upperAccidentallowerAccidental)
r'   rd   rf   r_   num_tremolo_spannerscountr   rx   
upperCount
lowerCounts
             r)   testOrnamentCz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                   ddl m} ddlm} |j	                  |j
                        }|t        j                     }| j                  t        |      d       g }|D ]  }|j                  |j                          | j                  |g d       y )Nr   rc   re   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))r>   rd   rm   rf   rS   textBoxes01r   TextBoxrD   r1   r   content)r'   rd   rf   r_   tbsrV   tbs          r)   testTextBoxAzTest.testTextBoxA  sq    %2OOM556oS1%BJJrzz"  > 	?r+   c                *   ddl m} |j                  d      }|j                         }|j	                  t
        j                        }| j                  t        |      d       |j                  d   j                         j                  d   |j                  d   j                         j                  d   }}| j                  t        |      |d   j                         d          | j                  t        |      |d   j                         d          y )Nr   rZ   z mozart/k545/movement1_expositionr.   r   r{   r=   )r>   r[   rS   r   ro   r   SlurrD   r1   r]   r   rt   getSpannedElementIds)r'   r[   r_   sfslursr9  r:  s          r)   testImportSlursAzTest.testImportSlursA  s    " LL;<YY[%%gll3UQ'##%++A.
0B0B0D0J0J10MB 	Bq!>!>!@!CDBq!>!>!@!CDr+   c                   ddl m} ddlm} |j	                  |j
                        }| j                  t        |t        j                           d       | j                  t        |t        j                           d       y Nr   rc   re   r=   )r>   rd   rm   rf   rS   r   rD   r1   r   	Crescendo
Diminuendor   s       r)   testImportWedgeAzTest.testImportWedgeA  s\    %2OOM556Qx1123Q7Qx2234a8r+   c                    ddl m} ddlm} |j	                  |j
                        }| j                  t        |t        j                           d       y Nr   rc   re   r.   )
r>   rd   rm   rf   rS   directions31arD   r1   r   r  r   s       r)   testImportWedgeBzTest.testImportWedgeB  s>    %2 OOM778Qx1123Q7r+   c                    ddl m} ddlm} |j	                  |j
                        }| j                  t        |t        j                           d       y )Nr   rc   re   r\   
r>   rd   rm   rf   rS   r   rD   r1   r   Liner   s       r)   testBracketImportBzTest.testBracketImportB  s9    %2OOM556Qw||_-q1r+   c                    ddl m} ddlm} |j	                  |j
                        }| j                  t        |t        j                           d       y r  )
r>   rd   rm   rf   rS   r  rD   r1   r   TrillExtensionr   s       r)   testTrillExtensionImportAzTest.testTrillExtensionImportA  s<    %2OOM667Q{99:;Q?r+   c                <   ddl m} ddlm} |j	                  |j
                        }t        |t        j                           }| j                  t        |      d       | j                  |d   j                  d       | j                  |d   j                  d       y )Nr   rc   re   r.   	chromaticr=   
continuous)r>   rd   rm   rf   rS   r   listr   	GlissandorD   r1   	slideType)r'   rd   rf   r_   glissess        r)   testGlissandoImportAzTest.testGlissandoImportA  sy    %2OOM556q**+,Wq)--{;--|<r+   c                    ddl m} ddlm} |j	                  |j
                  d      }| j                  t        |t        j                           d       y )Nr   rc   re   r  r  r\   r  r   s       r)   testImportDasheszTest.testImportDashes  s=    %2OOM55jOIQw||_-q1r+   c                    ddl m} ddlm} |j	                  |j
                        }|j                  D cg c]  }t        |       }}| j                  |g d       y c c}w )Nr   rc   re   )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   )	r>   rd   rm   rf   rS   r*  r   r0   rD   )r'   rd   rf   r_   r4   r  s         r)   testImportGraceAzTest.testImportGraceA  sR    %2OOM778!"+AQ+ !; 	< ,s   Ac                L   t               }| j                  d      }| j                  t        j                  |j
                  |       | j                  d      }|j                  |       | j                  d      }| j                  t        j                  |j
                  |       y )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*   r8   r   BarExceptionxmlToRepeat)r'   MP	mxBarlines      r)   testBarExceptionzTest.testBarException  s    _GGST	#**BNNIFGG I J	 	y! GGQR	#**BNNIFr+   c                    t               }| j                  d      }| j                  t        d      5  |j	                  |       d d d        y # 1 sw Y   y xY w)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)   testChordSymbolExceptionzTest.testChordSymbolException-  sK    _GG a b	##$;=ST	* UTTs   AAc                "   ddl m} |j                  d      }|j                         j	                  t
        j                        j                         }|j	                  t
        j                        }| j                  t        |      d       |j	                  t
        j                        }| j                  t        |      d       |j	                  t
        j                        }| j                  t        |      d       |j	                  t
        j                        }| j                  t        |      d       | j                  t        |      d       |d   }| j                  |j                  d        | j                  |j                  d	       | j                  |j                   d
       | j                  |j"                  d       g }	|D ]*  }
|
j$                  |	j'                  |
j$                         , | j                  |	g d       y )Nr   rZ   zdemos/layoutTest.xml*      r{  r=   I        `j@     Q@rh         T@g      ^@r  )r>   r[   rS   r   ro   r   
LayoutBaser   r   rD   r1   StaffLayout
PageLayoutScoreLayoutdistancetopDistance
leftMarginrightMargin	staffSizer   )r'   r[   r;  layoutssystemLayoutsstaffLayoutspageLayoutsscoreLayoutssl0sizesr_   s              r)   testStaffLayoutz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                   ddl m} |j                  d      }|j                         j	                  t
        j                        j                         }| j                  t        |      d       |j	                  t
        j                        }|d   }| j                  |j                  d        | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       |j	                  t
        j                        }g }|D ]*  }|j                   |j#                  |j                          , | j                  |g d       y )	Nr   rZ   zdemos/layoutTestMore.xmlL   r  r  rh   r  )r>   r[   rS   r   ro   r   r  r   rD   r1   r   r  r  r  r  r  r  r   )	r'   r[   r;  r  r  r  r  r  r_   s	            r)   testStaffLayoutMorez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                8   ddl m} |j                  d      }|j                         j	                  t
        j                        }| j                  t        |      d       t        j                  t        j                  f}|j                         j	                  |      }| j                  t        |      d       |t        j                     }| j                  t        |      d       d}|D ]  }|t        |j                        z  } | j                  |d       y)	z=
        good test of both dynamics and a PartStaff.
        r   rZ   zschoenberg/opus19/movement2.mxlr\   2   -   a   N)r>   r[   rS   r   ro   r   DynamicrD   r1   r   r   r   r   r   )	r'   r[   r;  dynAllnotesOrChordsallNotesOrChords	allChordspCountccs	            r)   testCountDynamicszTest.testCountDynamicsb  s     	#LL:;//0@0@AVa(EKK099;99-H-.3ekkN	Y,Bc"**o%F $r+   c                   ddl m} t        j                         dz  }|dz  }|j	                  |      }|j
                  d   j                  t        j                        j                         }|j                         j                  d   }| j                  |j                  d       | j                  |d   |       | j                  |d   |       y )Nr   rc   r  ztestTrillOnOneNote.xmlzF#r   )r>   rd   r   getSourceFilePathrS   r]   ro   r   r  rq   r~   r   rD   r   rM  )r'   rd   thisDirtestFpr;  trillExtensionfSharpTrills          r)   testTrillOnOneNotezTest.testTrillOnOneNotet  s    %**,z933OOF#66{7Q7QRXXZiik''*))40nQ'5nR(+6r+   c                Z   ddl m} |j                  d      }|j                  d   j	                  d      j                  t        j                        j                         }|j                         d   }| j                  d|j                         | j                  |j                  d       y)	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   rZ   zluca/gloriar=   c   r  rQ   N)r>   r[   rS   r]   r   ro   r   r   rq   getSpannerSitesrF   r  rD   idLocal)r'   r[   r;  rbracketAttachedToRests        r)   testLucaGloriaSpannerszTest.testLucaGloriaSpanners  s     	#LL'GGAJr"55dii@FFH ! 1 1 3A 6f3;;<.66<r+   c                h   ddl m} |j                  d      }|j                  d   j	                  d      }|j
                  j                  d      j                  t        j                        j                         }| j                  t        |      d       | j                  |j                  d       y )Nr   rZ   zdemos/voices_with_chords.xmlr=   rg   z<music21.chord.Chord G4 B4>ri   )r>   r[   rS   r]   r   rs   getElementByIdro   r   r   rq   rD   reprru   )r'   r[   r;  rv   
firstChords        r)   testTwoVoicesWithChordszTest.testTwoVoicesWithChords  s    "LL78WWQZ"YY--c2EEekkRXXZ
j)+HI**C0r+   c                   dd} |dd      } |       } |dd      }t               }d}t        |||g      D ]h  \  }}t        j                  |      }	|j	                  |	      }
| j                  t        |
      d       | j                  |
d   j                  ||          j  |d      } |       } |d      }t               }d}t        |||g      D ]h  \  }}t        j                  |      }	|j	                  |	      }
| j                  t        |
      d       | j                  |
d   j                  ||          j y)	z_
        test that three notes with tuplets start, none, stop
        have these types
        Nc                L    d}d}| ||z   S |d|  d}n	d| d|  d}||z   |z   S )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)   getNoteByTupletTypeNumberz@Test.testParseTupletStartStop.<locals>.getNoteByTupletTypeNumber  sa    G F!''~7
|CST	 2&*M]^  Y&//r+   startr=   stop)r  Nr  r   NN)r   	enumerater%   r&   xmlToTupletsrD   r1   r   )r'   r  n0r9  r:  r  tupTypesr   r   mxNotetupletss              r)   testParseTupletStartStopzTest.testParseTupletStartStop  s-   	06 'w2&(&vq1_*r2rl+DAq]]1%F oof-GS\1-WQZ__hqk: , 'w/&(&v._*r2rl+DAq]]1%F oof-GS\1-WQZ__hqk: ,r+   c                B   dt         j                  dz  dz  dz   d}t               }t        j                  |      }|j                  |      }| j                  t        |      d       |j                  |       |j                  }| j                  t        |j                  j                        d       d}| j                  t        |j                  j                        |       | j                  |j                  j                  t        j                  dd             y)	zO
        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>
        r.   zL(<music21.duration.Tuplet 3/2/eighth>, <music21.duration.Tuplet 3/2/eighth>)	   N)r   divisionsPerQuarterr   r%   r&   r  rD   r1   	xmlToNotenLastr
   r   r  r   	fractionsFraction)r'   mxNr  r  r   r   expected_tuplet_reprs          r)   testComplexTupletNotez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                   ddl m} |j                  d      }t        |j	                         j
                        }| j                  t        |d   j                  j                        d       d}t        dd      D ]4  }| j                  t        ||   j                  j                        |       6 | j                  t        |d   j                  j                        d       d	}t        d
d      D ]4  }| j                  t        ||   j                  j                        |       6 | j                  t        |d   j                  j                        d       g }|dd D ]W  }|j                  |j                  j                  d   j                  |j                  j                  d   j                  f       Y | j                  |g d       y )Nr   rZ   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>)r=   r\   z()zJ(<music21.duration.Tuplet 5/4/16th>, <music21.duration.Tuplet 3/2/eighth>)rj     ))Nr  r  r  r  )r  r  )r>   r[   rS   r  r~   r   rD   r  r
   r   r   r   r   )	r'   r[   r;  nListexpected_tuplet_repr_1_to_6r   expected_tuplet_repr_7_to_12tuplet_pairs_per_noter   s	            r)   testNestedTupletsz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                :   ddl m} ddlm} |j	                  |j
                        }|j                         j                  D cg c]  }|j                  j                  d    }}| j                  |D cg c]  }|j                   c}g d       y c c}w c c}w )Nr   rc   re   )TTTFFF)r>   rd   rm   rf   rS   tupletsImpliedr~   r   r
   r   rD   bracket)r'   rd   rf   r_   r   r   tups          r)   testImpliedTupletzTest.testImpliedTuplet1  s|    %2OOM889 34))+2C2CD2CQ1::%%a(2CD9##++9;bc E9s    B5Bc                D   ddl m} d} ||      }t               }t        j                  d      |_        |j                  |      }|j                  d   }| j                  |j                  j                  d       | j                  |j                  j                  d       y )Nr   r&   zA<measure><note><rest/><duration>40320</duration></note></measure>z3/4halfrk   )xml.etree.ElementTreer&   r    r   TimeSignaturelastTimeSignaturexmlMeasureToMeasurenotesAndRestsrD   r
   r   r   )r'   r*   scoreMeasure	mxMeasurerU   r   measureRests          r)   test34MeasureRestWithoutTagz Test.test34MeasureRestWithoutTag;  s    : [|$	\$2259""9-ooa(--22F;--;;SAr+   c                   ddl m} |j                  d      }|j                  d   j	                  d      j
                  d   }| j                  |j                  j                  d       | j                  |j                  d       y)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   rZ   zschoenberg/opus19/movement6r=   quarterautoN)
r>   r[   rS   r]   r   r@  rD   r
   r   fullMeasure)r'   r[   schr  s       r)   testPickupMeasureRestSchoenbergz$Test.testPickupMeasureRestSchoenbergH  se     	#ll89IIaL  #11!4)4/r+   c                <   ddl m} ddlm} |j	                  |j
                        }|t        j                     }| j                  t        |      d       | j                  |d   j                  d       | j                  |d   j                  d       | j                  |d   j                  j                  t        j                  j                         | j                  |d   j                  d	       | j                  |d   j                  j                  d
       y )Nr   rc   re   r   Ar=   r   r.   r"   square)r>   rd   rm   rf   rS   r  r   RehearsalMarkrD   r1   r  r   r   	EnclosureNO_ENCLOSURE)r'   rd   rf   r_   
rmIterators        r)   testRehearsalMarksz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                   ddl m} ddl m} ddlm} |j                  |j                        }t        |t        j                           }| j                  t        |      d       |d   }|j                  |       | j                  |j                         | j                  |j                  t        j                   j"                         |j%                         }| j                  t        |      d       g d}t'        t)        ||            D ]  \  }	\  }
}|	dk(  r!| j+                  |
t        j,                         n<| j+                  |
t.        j0                         | j                  |
j2                  d       | j                  |
j4                  |        |j                  |j6                        }t        |t        j                           }| j                  t        |      d       |d   }|j                  |       | j                  |j                         | j                  |j                  t        j                   j"                         |j%                         }| j                  t        |      d	       g d
}t'        t)        ||            D ]  \  }	\  }
}|	dk(  r!| j+                  |
t        j,                         n<| j+                  |
t.        j0                         | j                  |
j2                  d       | j                  |
j4                  |        |j                  d      }t        |t        j                           }| j                  t        |      d       |d   }|j                  |j8                  d          | j                  |j                  t        j:                  j<                         | j                  |j                  t        j                   j"                         |j%                         }| j                  t        |      d       | j+                  |d   t>        j@                         | j                  |d   j2                  d       | j                  |d   j4                  d       | j+                  |d   t.        j0                         | j                  |d   j2                  d       | j                  |d   j4                  d       |j                  d      }t        |t        j                           }| j                  t        |      d       |d   }|j                  |j8                  d          | j                  |j                  t        j:                  j<                         | j                  |j                  t        j                   j"                         |j%                         }| j                  t        |      d       g d}t'        t)        ||            D ]`  \  }	\  }
}| j+                  |
t.        j0                         | j                  |
jB                  d       | j                  |
j4                  |       b y )Nr   rc   rZ   re   r=   r   )rh   ri   ri   rj   zC in octave 4 Quarter Noter   )rh   ri   ri   zB in octave 4 Quarter Notebeachr{   r.   z5Chord {E-flat in octave 2 | B-flat in octave 2} Wholerh   zE-flat in octave 1 Whole Notedichterliebe_no2)r   g      ?rh   g      ?ri   A3)"r>   rd   r[   rm   rf   rS   r  r  r   	PedalMarkrD   r1   fillr!  	pedalForm	pedalType	PedalTypeSustaingetSpannedElementsr  zipr   PedalBouncer   r   fullNameru   r   r]   	PedalFormSymbolr   r   r   )r'   rd   r[   rf   r_   pedalspm
spElementsexpectedOffsetsr   r   expectedOffsets               r)   testPedalMarkszTest.testPedalMarksc  s   %"2OOM778a--./Va(AY

",,'{'<'<'D'DE**,
Z!,.'0Z1Q'R#A#N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Z1Q'R#A#N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Z1Q'R#A#N!!"dii0R..5RYY7 (Sr+   c                   ddl m} t        j                         dz  }|dz  }|j	                  |      }| j                  dt        |t        j                                  | j                  dt        |t        j                                  | j                  d|t        j                     d   j                         | j                  d|t        j                     d	   j                         | j                  d
t        |t        j                     d   j                               | j                  dt        |t        j                     d	   j                               y )Nr   rc   r  z
testNC.xmlr{   r.   zaugmented-seventhnoner=   r   zN.C.)r>   rd   r   r  rS   rD   r1   r   r}  NoChordr~  r0   chordKindStr)r'   rd   r  r   r_   s        r)   testNoChordImportz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                    ddl m} t               }d}|dz  } ||      }|j                  |      }| j	                  |j
                  d       y)zw
        m21 name ('dominant-seventh') should be looked up from musicXML aliases
        (such as 'dominant').
        r   r:  zB<harmony><root><root-step>D</root-step><root-alter>-1</root-alter>z)</root><kind>major-minor</kind></harmony>zminor-major-seventhN)r<  r&   r   r  rD   r~  )r'   r*   mpelStrr  css         r)   testChordAliaszTest.testChordAlias  sL    
 	;_T<<uI	  +'<=r+   c                    ddl m} t        j                         dz  }|dz  }|j	                  |      }g d}t        |t        j                     |      D ]!  \  }}| j                  |j                  |       # y )Nr   rc   r  ztestChordOffset.xml)rh   rj   rh   rj   rh   rj   )
r>   rd   r   r  rS   r^  r   r}  rD   ru   )r'   rd   r  r   r_   r   chru   s           r)   testChordOffsetzTest.testChordOffset  sm    %**,z900OOF#0a 3 34%'JBRYY/'r+   c                `   ddl m} t               } |d      }|j                  |      }| j	                  |j
                  d        |d      }|j                  |      }| j	                  |j
                  d        |d      }|j                  |      }| j                  |j
                         y )Nr   r:  z\<harmony placement="below"><root><root-step>C</root-step></root><kind>major</kind></harmony>belowz\<harmony placement="above"><root><root-step>G</root-step></root><kind>major</kind></harmony>abovezJ<harmony><root><root-step>F</root-step></root><kind>major</kind></harmony>)r<  r&   r   r  rD   	placementr!  )	r'   r*   ro  h_belowrq  h_abovecs2h_nonecs3s	            r)   testChordSymbolPlacementzTest.testChordSymbolPlacement  s    :_ 4 5   )w/ 4 5 !!'*0 3 4 !!&)#--(r+   c                    ddl m}  |d      }t               }|j                  |      }| j	                  |j                         d       y )Nr   r:  zt
        <harmony><root><root-step>C</root-step></root>
        <kind>major</kind><inversion>1</inversion></harmony>r=   )r<  r&   r   r  rD   	inversion)r'   r*   r  ro  rq  s        r)   testChordInversionzTest.testChordInversion  sE    : @ A _  #+r+   c                    ddl m}  |d      } |d      }t               }|j                  |      d   }|j                  |       | j	                  |j
                  d       | j	                  |j                  d       y )Nr   r:  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      )@)r<  r&   r   xmlDirectionTypeToSpannersrD   startHeight	endHeight)r'   r*   el1el2ro  rB  s         r)   testLineHeightzTest.testLineHeight  so    :`a_`_,,S1!4
%%c*))40.r+   c                   ddl m} t        j                         dz  }|dz  }|j	                  |      }|j
                  d   }t        |j                         j                        }| j                  |d   j                  d   t        j                         | j                  |d   j                  d   j                  d       | j                  |d   j                  d   t        j                         | j                  |d   j                  d   j                  d       | j                  |d   j                  d   t        j                         | j                  |d   j                  d   j                  d       | j                  |d   j                  d   t        j                         | j                  |d   j                  d   j                  d       y )	Nr   rc   r  testTab.xmlr   r=   r.   r   )r>   rd   r   r  rS   r]   r  r~   r   r   r   StringIndicationrD   r   r'   rd   r  r   scoreguitar_partr   s          r)   testStringIndicationz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                    ddl m} ddlm} |j	                  |j
                        }|t        j                     j                         }| j                  t        |j                        d       y )Nr   rc   re   r   )r>   rd   rm   rf   rS   multipleFingeringsOnChordr   r   rq   rD   r1   r   )r'   rd   rf   r_   r;  s        r)   testArticulationsOnChordzTest.testArticulationsOnChord  sK    %2OOMCCDekkN  "Q__-q1r+   c                   ddl m} t        j                         dz  }|dz  }|j	                  |      }|j
                  d   }t        |j                         j                        }| j                  |d   j                  d   t        j                         | j                  |d   j                  d   j                  d       | j                  |d   j                  d   t        j                         | j                  |d   j                  d   j                  d       | j                  |d   j                  d   t        j                         | j                  |d   j                  d   j                  d       | j                  |d	   j                  d   t        j                         | j                  |d	   j                  d   j                  d	       y )
Nr   rc   r  r  r=   rj  r   r.   r   )r>   rd   r   r  rS   r]   r  r~   r   r   r   FretIndicationrD   r   r  s          r)   testFretIndicationz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                   ddl m} ddlm} |j	                  |j
                        }|j                  d   }|j                  d      }d}|D ]*  }t        |t        j                        s| j                  |      5  | j                  |t        j                         | j                  |j                  d   t        j                          |dk(  r+| j#                  |j                  d   j$                  d       n|dk(  r*| j#                  |j                  d   j$                  d       n|dk(  r*| j#                  |j                  d   j$                  d       n|d	k(  r*| j#                  |j                  d   j$                  d
       n|dk(  r*| j#                  |j                  d   j$                  d       n]|dk(  r*| j#                  |j                  d   j$                  d       n.|dk(  r)| j#                  |j                  d   j$                  d       | j'                  |dkD         |j(                  D ]3  }|j                  D ]"  }	| j+                  |	t        j                          $ 5 |dz  }d d d        - y # 1 sw Y   9xY w)Nr   rc   re   r=   )gnote_indexnormalupr.   r   r1  r   r{   znon-arpeggior\   )r>   rd   rm   rf   rS   arpeggio32dr]   r   
isinstancer   GeneralNotesubTestr   r   r   r   ArpeggioMarkrD   r   r?   r   assertNotIsInstance)
r'   rd   rf   r_   r4   r   r  r   r   exps
             r)   testArpeggioMarkszTest.testArpeggioMarks8  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   =G2I;;J	c                   ddl m} ddlm} t	        j
                  t        j                  |j                  |j                              }|j                  j                  t        j                        }| j                  |       |d   }g }t        |j                         D ]*  \  }}|j#                  |t$        j&                     d          , t)        ||      D ]  \  }	}
| j+                  |	|
        y r  )r>   rd   rm   rf   tcastr   ScorerS   multiStaffArpeggiosspannerBundle
getByClassr   ArpeggioMarkSpannerassertIsNotNoner  r]   r   r   r   r^  rM  )r'   rd   rf   r_   sbspchordsr   r4   spannedrt  s              r)   testArpeggioMarkSpannerszTest.testArpeggioMarkSpannersa  s    %2FF6<<1R1R!ST__''(G(GHR U$&agg&DAqMM!EKK.+, ' r6?KGRMM'2& +r+   c                L   ddl m} ddl m} ddlm} |j                  |j                        }|j                         j                  \  }}| j                  |j                  t        j                               | j                  |j                  t        j                               |j                  |j                        }|j                         j                  \  }}| j                  |j                  j                   |j                  j                          |j                  t        j                        d   }| j#                  |j$                  j&                         |j                  t        j                        }| j                  |D 	cg c]  }	|	j$                  j&                   c}	ddg       |j                  dd      }
|
j(                  d   t*        j,                     j/                         }|
j(                  d   t*        j,                     j/                         }|j                  j/                         j1                         }| j3                  |t        j                         | j                  |j$                  j&                  d       | j                  |j                   d	       | j                  t5        |j                        d       | j                  |t        j                     D 	cg c]  }	|	j$                  j&                   c}	d
gdz         y c c}	w c c}	w )Nr   rc   rZ   re   Tzschoenberg/opus19r.   r=   rj   Fr   )r>   rd   r[   rm   rf   rS   hiddenRestsNoFinaler~   rs   r?   ro   r   r   hiddenRestsFinalerD   r
   r   rH   r   rN  r]   r   rp   r   rq   r   r1   )r'   rd   r[   rf   r_   v1v2restV1restsV2r  rI  rh_lastlh_last
hiddenRests                 r)   testHiddenRestszTest.testHiddenRestsr  sD   %"2 OOM==>##B..tyy9:..tyy9: OOM;;<##B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                .   ddl m} d}|dz  }|dz  }|dz  } ||      }t        |      }|j                          | j	                  t        |j                  j                        d       | j	                  t        |j                  j                  d   j                        d	       | j	                  t        |j                  j                  d	   j                        d	       | j	                  |j                  j                  d	   j                  d
       y)zk
        MuseScore expects readers to infer the voice context surrounding
        a <forward> tag.
        r   r:  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>)rB  r.   r=   znon-integer-valueN)
r<  r&   r   rS   rD   r1   r   rs   elementsrt   )r'   r*   rp  rB  r  s        r)   testHiddenRestImpliedVoicez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   ddl m} ddlm} |j	                  |j
                        }|j                         j                  t        j                        }| j                  |d   j                  ddg       | j                  |d   j                  dg       |j
                  j                  dd      }|j	                  |      }|j                         j                  t        j                        j                         }| j                  |j                  dg       y )	Nr   rc   re   r=   r.   r   z1,2zad lib.)r>   rd   rm   rf   rS   multiDigitEndingr~   ro   r   r  assertListEqualnumberRangereplacerq   )r'   rd   rf   r  repeatBracketsnonconformingInputscore2repeatBrackets           r)   testMultiDigitEndingz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                D   ddl m} ddlm} |j                  j                         }d} ||      }|j                  |      }| j                  t        |j                               dk(         | j                  t        j                  d      |j                  d   k(         y )Nr   )r  r:  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>r=   zG-3r.   )r>   r  r<  r&   xmlToM21r   r  rH   r1   getChordStepModificationsr   Pitchr   )r'   r  r*   r  rp  r  rq  s          r)   testChordAlterationzTest.testChordAlteration  s    $:,,.? uI	  +B88:;q@AE*bjjm;<r+   c                2   ddl m} t        j                         dz  dz  }|dz  }|j	                  |      }t        |j                         j                        }| j                  t        |d   j                        d       |d   j                  d   }| j                  |j                         | j                  |j                  d       | j                  t        |j                        d       | j                  |j                  d   j                  d	       | j                  |j                  d   j                  d
       | j                  |j                  d   j                  d       | j                  |j                  d   j                  d
       | j                  |j                  d   j                   d       | j                  |d   j"                  d       | j                  t        |d   j                        d       |d   j                  d   }| j                  t        |j                        d       | j                  |j                  d   j                   d       | j                  |j$                  d       | j                  |d   j"                  d       | j                  t        |d   j                        d       |d   j                  d   }| j                  t        |j                        d       | j                  |j                  d   j                   d       | j                  |j                  d   j                   d       | j                  |j$                  d       | j                  |j                  d   j                  d       | j                  |j                  d   j                  d
       | j                  |j                  d   j                  d       | j                  t        |j                  d      d   d         d       y)z]
        Tests multiple lyrics in same note but with same number (not stanza change)
        r   rc   r  lilypondTestSuitez!61l-Lyrics-Elisions-Syllables.xmlr=   	compositer.   bmiddler;   E z-der   rw  _~zf_g~hbeginendT)r~   r   N)r>   rd   r   r  rS   r  r   r   rD   r1   lyricsrH   isCompositesyllabic
componentsr   elisionBeforer   rawText)	r'   rd   xmlDirfpr_   r   ly1ly2ly3s	            r)   testCompositeLyricsz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                n   ddl m} ddl m} ddlm}m} |j                  |j                        }|t        j                     j                         }| j                  |j                  j                  d       |j                  |j                        }|t        j                      j                         }| j                  |j                  j"                  d       |j                  |j$                        }|j'                         D cg c]'  }|j(                  s|j                  j"                  |) }	}| j                  t+        |	      d       | j                  t-        t/        d |	D                    t0        j2                  g       |j                  d	      }|j'                         D cg c]'  }|j(                  s|j                  j"                  |) }	}| j                  t+        |	      d
       | j                  t5        t/        d |	D              t6              t        j8                  t        j:                  t        j                  t0        j2                  g       |	D cg c]  }d|j<                  v s| }
}| j                  |
d   j                  j"                  d       |j                  |j>                        }|t@        jB                     j                         }| j                  |j                  jD                  d
       | j                  |jF                  d       y c c}w c c}w c c}w )Nr   rc   rZ   )rf   r   r\   r{  r   c              3  2   K   | ]  }t        |        y wr$   r   .0r   s     r)   	<genexpr>z-Test.testDirectionPosition.<locals>.<genexpr>  s     6"T"X   rT  r|  c              3  2   K   | ]  }t        |        y wr$   r   r  s     r)   r  z-Test.testDirectionPosition.<locals>.<genexpr>  s     8-BtBx-r  r   r  irx  )$r>   rd   r[   rm   rf   r   rS   mozartTrioK581Excerptr   r  rq   rD   r   	relativeYr  r   r  	relativeXr   r~   hasStyleInformationr1   r  r   r   r   sortedr  r  r  r  tabTestr   r  r   ry  )r'   rd   r[   rf   r   r_   dynsegr   positionedEls
crescendosmetros               r)   testDirectionPositionzTest.testDirectionPosition  s~   %"= OOI;;<  !''),,a0 OOM<<=o##%,,b1 OOM99:&'iik 0kR5K5K"". k 0]+Q/6667''(	
 LL!&'iik 0kR5K5K"". 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s$   L(L(,L->L-&L2:L2c           
     $   ddl m} t        j                         dz  dz  }|j	                  |dz        }|t
        j                     j                         }| j                  |j                  D cg c]  }|j                   c}g d       | j                  |j                  D cg c]  }|j                   c}|j                         j                         j                  D cg c]  }|j                   c}       |t        j                     }| j                  |D cg c]  }|j                   c}g d       | j                  |D cg c]  }|j                    c}g d       | j                  |D cg c]  }|j"                   c}g d	       | j                  |D cg c]*  }|j%                         D cg c]  }|j                   c}, c}}d
gddgddgddgg       y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}}w )Nr   rc   r  r  z33d-Spanners-OctaveShifts.xml)	r   r   A6rq  B2r   r   B3r   )FFFF)15ma15mb8va8vb)rx  rw  rx  rw  r  rq  r  r   r  r   )r>   rd   r   r  rS   r   rp   rq   rD   r   r   r`  r   r   r   transposingr   ry  r]  )r'   rd   xml_dirr_   r   r4   ottava_objsr   s           r)   testImportOttavazTest.testImportOttava(  s   %**,z9<OOOOG&EEFfnn##%'(yy1y!Qy1B	

 	'(yy1y!Qy1'('8'8':'B'B'D'L'LM'L!Q'LM	
 '$/0KqQ]]K0(	
 	()[QVV[)*	
 	"-.+QQ[[+.0	
 	ITUA(<(<(>?(>1a(>?U VdD\D$<$>		
+ 2
 2M 1 * / @Us<   /G)%G.$G3
 G8G=8H%H
<HH
H
c                ^   ddl m} t               }d|_        t	        j
                  d      }| j                  t        |j                        d        |d      }|j                  ||       | j                  t        |j                        d       | j                  |j                  d       y )	Nr   r:  r   r#  r=   zR<note><pitch><step>D</step><octave>6</octave></pitch><duration>3</duration></note>)inputM21T)r<  r&   r   	divisionsr
   r$  rD   r1   r   xmlToDurationlinked)r'   r*   r  dmxNoteNoTypes        r)   testClearingTupletszTest.testClearingTupletsL  s    :_e$QYY+ < =
2QYY+4(r+   c                V   ddl m} d}t               } ||      }|j                  |      }| j	                  |t
        j                         | j                  |j                  d       |j                  dd      }|j                  dd      }|j                  d	d
      }t               } ||      }d}| j                  t        |      5  |j                  |      }d d d        | j	                  t
        j                         | j                  |j                  d       y # 1 sw Y   FxY w)Nr   r:  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   )r<  r&   r    getDefaultInstrumentr   r   r  rD   percMapPitchr  assertWarnsRegexr   UnpitchedPercussion)r'   r*   	scorePartrU   rP   tmbrV   unps           r)   testImportUnpitchedPercussionz"Test.testImportUnpitchedPercussionY  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                *   ddl m} t        j                         dz  dz  }|j	                  |dz        }|t
        j                     j                         }| j                  |j                  t
        j                  j                  j                         y )Nr   rc   r  r  z&46d-PickupMeasure-ImplicitMeasures.xml)r>   rd   r   r  rS   r   rp   rq   rM  
showNumberenums
ShowNumberNEVER)r'   rd   r  r_   r   s        r)   testImportImplicitMeasureNumberz$Test.testImportImplicitMeasureNumberz  sk    %**,z9<OOOOG&NNOfnn##%allFLL$;$;$A$ABr+   c                &   t        j                  d      }t        j                  t	        j
                  d      t        j                  |      g      }t               }d|_	        |j                  |       | j                  t              5  |j                  |       d d d        | j                  |j                  d       t        j                  d      }t        j                  t	        j
                  d      t        j                  |      g      }t               }d|_	        |j                  |       |j                  |       | j                  |j                  d       t        j                  d      }t        j                  t	        j
                  d      t        j                  |      g      }t               }d|_	        |j                  |       |j                  |       | j                  |j                  d	       y # 1 sw Y   kxY w)
Ng@z6/8r	   g      5@g      8@g      	@g      8@r   g      9@)r
   r$  r   rp   r   r=  r   r   r    lastMeasureOffsetsetLastMeasureInfoassertWarnsr   adjustTimeAttributesFromMeasurerD   )r'   r
  r   rU   s       r)   #testAdjustTimeAttributesFromMeasurez(Test.testAdjustTimeAttributesFromMeasure  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           	     "   ddl m} ddlm} |j	                  |j
                        }| j                  t        |j                        d       | j                  |t        j                            |t        j                     j                         }dD ]p  }|j                  |   }| j                  ||       | j                  t        |t        j                           d       | j                  t        |t         j"                           d       |t         j"                     \  }}}	| j                  |t$        j&                            |t$        j&                     j                         }
| j                  |
j(                  d       | j                  |
j*                  d       | j                  |t$        j&                            |t$        j&                     j                         }| j                  |j(                  d	       | j                  |j*                  d
       | j-                  |	t$        j&                            | j                  |	t$        j.                     j1                  d
             |	t$        j.                     j1                  d
d
      j                         }| j                  |j2                  d       |t4        j6                     }| j                  |d| d| d       | j                  t        |      d       |\  }}|j8                  dk(  r||}}| j                  t;        |      |g       | j                  t;        |      |	g       |t        j                     D cg c]  }|j<                   }}| j                  |g d       t?        j@                  t         jB                     |      jE                         }|t        j                     D cg c]  }|j<                   }}| j                  |g d       s y c c}w c c}w )Nr   rc   r   r.   )r   r=   r   r  rh   r  r   finalzPart :z has no RepeatBrackets)GrL  r   )r*  rL  r*  r   )#r>   rd   rm   r   rS   pianoRepeatEndingsrD   r1   r]   rH   r   rE  rq   rF   r   r   r   rp   r   r^   	directionru   r?   r   getElementsByOffsetr   r   r  r   r  r   r   ExpanderPartprocess)r'   rd   r   r_   sgp_numr4   rv   r   m3repeat_start
repeat_end	final_barrepeat_bracket_iteratorrb1rb2r   p_notes
p_expandedp_notes2s                       r)   testPianoStaffWithRepeatEndingsz$Test.testPianoStaffWithRepeatEndings  s   %.OOI889QWWq)&++,-v  !'')EAMM!R S499.2S6>>!23Q76>>*JBB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N)returnrZ  )U__name__
__module____qualname__r*   r5   r;   rM   rX   ra   ry   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r&  r(  r,  r@  rK  rP  rX  rh  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r!  r,  r3  r8  rD  rJ  rR  rh  rm  rr  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r&  r=  r  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  unittestr<  etreeElementTreer%   r>   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?  mainTestr  r+   r)   <module>rK     s    "    " " !                      
g=8 g=T5 zGT r+   