
    rh%                    z   S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJrJ	r	  S SKJ
r
  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr   " S S\5      r " S S\R:                  5      r\S:X  a  S SKr\R@                  " \5        gg)    )annotationsN)bar)base)Music21ObjectElementWrapper)clef)ElementSearchOffsetSpecial)	converter)corpus)dynamics)	editorial)exceptions21)key)meter)note)scale)SitesException)spanner)stream)tempoc                      \ rS rSrSrg)TestMock%    N__name__
__module____qualname____firstlineno____static_attributes__r       P/home/james-whalen/.local/lib/python3.13/site-packages/music21/test/test_base.pyr   r   %   s    r"   r   c                     \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S-r/g.)/Test)   c                    [         R                  " 5       n[        [        U5      5      nU R	                  [        U5      SU S35        g )Nz&<music21.base.Music21Object object at >)r   r   hexidassertEqualrepr)selfaaddresss      r#   testM21ObjReprTest.testM21ObjRepr+   s<     be*a$J7)ST"UVr"   c                    [        5       nUR                  R                  S5        SUl        SUl        U R                  UR                  S5        g )Nhellohi       @)r   groupsappendr*   offsetr+   r-   r.   s     r#   testObjectCreationTest.testObjectCreation0   s;    J	 3'r"   c                   [         R                  " S5      n[        U5      nSUl        [        U5      nSUl        U R	                  X#5        U R                  X#5        [        [         R                  " S5      5      nU R                  X$5        g )NzF-      @r5   G)r   Noter   r8   r+   assertIsNotassertNotEqual)r-   nr.   cbs        r#   testElementEqualityTest.testElementEquality7   sm    IIdO11499S>*A!r"   c                2   [         R                  " S5      nSUl        UR                  R	                  S5        [
        R                  " U5      nSUl        U R                  XL 5        SUR                  l	        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        SUR                  S'   U R                  SUR                  ;   5        U R                  SUR                  ;   5        g )NA      ?fluter5   -bassoonr   )r   r?   r8   r6   r7   copydeepcopyassertFalsepitch
accidentalr+   name
assertTrue)r-   rB   rD   s      r#   testNoteCreationTest.testNoteCreationB   s    IIcN	 MM!  %3'3'AHH,-188+,r"   c                    [        [        R                  " S5      5      nSUl        U R	                  UR                  S5        g )NzA#      7@)r   r   r?   r8   r+   r9   s     r#   testOffsetsTest.testOffsetsS   s/    499T?+4(r"   c                    [         R                  " S5      nSUR                  l        [        R
                  " 5       nUR                  U5        UR                  ng )NzB-whole)r   r?   durationtyper   Streamr7   notes)r-   note1stream1unused_subStreams       r#   testObjectsAndElementsTest.testObjectsAndElementsX   s<    		$%--/u"==r"   c                    [        5       nSUl        [        R                  " U5      nU R	                  X5        U R                  X5        U R                  UR                  S5        g)z
Test copying
testN)r   r*   rM   rN   r@   r+   )r-   r.   rD   s      r#   testM21BaseDeepcopyTest.testM21BaseDeepcopy_   sP     OMM!v&r"   c                H   [         R                  " 5       n[        R                  " 5       nSUl        U R                  [        UR                  5      S5        U R                  UR                  S5        U R                  UR                  S5        S nU R                  [        X1U5        UR                  U5        U R                  [        UR                  5      S5        U R                  UR                  U5        SUl        U R                  UR                  U5        U R                  UR                  S5        SUl        U R                  UR                  S5        U R                  [        UR                  5      S5        U R                  UR                  U5      S5        g)	z(
Basic testing of M21 base object sites
            >@c                    Xl         g N)
activeSite)aabbs     r#   assignActiveSite/Test.testM21BaseSites.<locals>.assignActiveSitey   s    Mr"      (         D@N)r   r   r   r^   r8   r+   lensites_naiveOffsetassertRaisesr   insertro   getOffsetBySite)r-   r.   rD   rr   s       r#   testM21BaseSitesTest.testM21BaseSitesj   s8     MMO QWWq).4(	 	.*:qA	QWWq)q)q) 	4( 4(QWWq)**1-t4r"   c                   [         R                  " 5       nSUl        [        R                  " 5       nSUl        SUl        UR                  SU5        [        R                  " U5      nSUl        U R                  [        UR                  5      S5        UR                  nU R                  [        UR                  5      S5        g)	z"
Basic testing of M21 base object
za objzb objrf   r   zc objrt   rk   N)r   r^   r*   r   r   r{   rM   rN   r+   rw   rx   )r-   r.   rD   rC   dummys        r#   testM21BaseLocationsCopyTest.testM21BaseLocationsCopy   s     MMO 	AMM! 	QWWq)QWWq)r"   c                   [         R                  " 5       n[        R                  " 5       nSUl        UR                  SU5        Xl        [         R                  " 5       nU R                  UR                  U5        U R                  [        UR                  5      S5        [        R                  " U5      nU R                  UR                  S 5        UR                  SU5        U R                  [        UR                  5      S5        g )Nrf   rj   rt      )r   r^   r   r   r*   r{   ro   r+   rw   rx   rM   rN   assertIs)r-   r.   rD   drC   s        r#   testM21BaseLocationsCopyBTest.testM21BaseLocationsCopyB   s     MMO 	QMMOq)QWWq)MM!allD)	QQWWq)r"   c                   [         R                  " S5      n[         R                  " S5      n[        R                  " SS9nUR	                  SU5        UR	                  SU5        [
        R                  " 5       n[
        R                  " 5       n[        R                  " SS9nUR	                  SU5        UR	                  SU5        UR	                  SU5        U R                  UR                  U5      S5        U R                  UR                  5       R                  S5      U5        U R                  UR                  5       R                  S5      U5        U R                  UR                  5       R                  S	5      U5        U R                  UR                  5       R                  S
5      U5        U R                  UR                  UR                  5       5      S
5        U R                  UR                  5       R                  U5      S
5        UR                  [
        R                  5      nU R                  U[
        R                  5        UR                  [
        R                  5      nU R                  U[
        R                  5        UR                  [
        R                  5      nU R                  US 5        UR                  [
        R                  5      nU R                  U[
        R                  5        g )NrH   Bs1)r*   
   d   s2r   r   n   )r   r?   r   r^   r{   r   
TrebleClefBassClefr+   r|   flattengetElementAtOrBeforeelementOffsetgetContextByClassassertIsInstance)r-   n1n2r   c1c2r   posts           r#   testSitesSearchTest.testSitesSearch   s   YYs^YYs^]]d#
		"b
		#r__]]_]]d#
		!R
		#r
		"b++B/4::1=rB::3?D::2>C::3?D
 	++BJJL93? 	33B7= ##DOO4dDOO4##DOO4dDOO4 ##DMM2t$ ##DMM2dDMM2r"   c                F   [         R                  " S5      nUR                  S   R                  [        R
                  5      R	                  5       nU R                  US   R                  U5        U R                  UR                  S   US   R                  5        US   R                  [        R                  5      nU R                  US   [        R                  5        U R                  [        UR                  S   R!                  5       R"                  UR                  S   S   5        UR                  S   S   R%                  [        R                  5      nU R                  U[        R                  5        US   R%                  [        R                  5      nU R                  U[        R                  5        [        R&                  " 5       nUR)                  SUS   5        U R+                  XBS   R                  ;   5        U R+                  X"S   R                  ;   5        U R+                  UR                  S   US   R                  ;   5        US   R%                  [        R                  5      nU R+                  [-        U[        R                  5      U5        g)z-
Can a measure determine the last Clef used?
zbach/bwv324.xmlr   rk      N)r   parsepartsgetElementsByClassr   Measurer+   ro   assertInrx   r   Clefr   r   rz   r   r   r   r   r^   r{   rS   
isinstance)r-   r.   measuresr   	newStreams        r#   testSitesMeasuresTest.testSitesMeasures   s    LL*+771:00@GGI 	!//:aggaj(1+"3"34 {--dii8d1gt7 	.!''!**<*<*>*L*LaggVWjYZm\ wwqz!}..tyy9dDOO4 {,,TYY7dDOO4 MMO	HQK(	a[%6%667QK$5$556
hqk&7&778 |--dii8
494@r"   c                f   [         R                  " 5       nSUl        [         R                  " 5       nSUl        [        R                  " 5       nUR                  U5        UR                  U5        [        R                  " 5       nSUl        UR                  SU5        UR                  S[        R                  /5      nU R                  [        U[        R                  5      U5        UR                  [        R                  5      nU R                  [        U[        R                  5      U5        g )NsOutersInnerr   )r   r^   r*   r   r?   r7   r   AltoClefpriorityr{   r   r   rS   r   r   )r-   r   r   rB   altoClefprer   s          r#   testSitesClefTest.testSitesClef  s    		IIKaf ==?a"))!dii[9
36< ''		2
47>r"   c                   [         R                  " S5      nUR                  S   nUR                  5       R	                  [
        R                  5      R                  5       nU R                  UR                  S5        U R                  UR                  R                  S5        U R                  UR                  S5        UR                  5       R	                  [        R                  5      R                  5       nU R                  UR                  S5        U R                  UR                  R                  S5        U R                  UR                  S5        UR                  5       R	                  [        R                   5      R                  5       nU R                  UR                  R                  S5        U R                  UR                  S5        / nUR                  5       R"                   H"  nUR%                  UR'                  5       5        M$     U R                  U/ SQ5        / nUR                  5       R"                   H  nUR%                  UR(                  5        M      U R                  U/ SQ5        / nUR	                  [*        R,                  5       H"  nUR%                  UR'                  5       5        M$     U R                  U/ SQ5        / nUR	                  [*        R,                  5       H  nUR%                  UR                  5        M      U R                  U/ S	Q5        / nUR	                  [*        R,                  5       H  nUR%                  UR(                  5        M      U R                  U/ S	Q5        / nUR	                  [*        R,                  5       H  nUR%                  UR                  5        M      U R                  U/ S	Q5        g
)z5
Test getting beat data from various Music21Objects.
bach/bwv66.6.xml#Soprano      @rI         ?)%r=   g      @        rI   r5   r=   r   rI   r5   r=   r         ?rI   r5   r=   r   rI   r5   r=   r   rI   r5   r=   r   rI   r5   r=   r   rI   r5   r   r5   r=   r   rI   g      ?r5   )%4z4 1/2123r   r   r   r   r   r   z1 1/2r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z2 1/2r   )
r   rI         @      "@      *@      1@      5@      9@      =@     @@)
NNNNNNNNNNN)r   r   r   r   r   r   r   firstr+   beatbeatDurationquarterLengthbeatStrengthr   KeySignaturer   TimeSignaturenotesAndRestsr7   _getMeasureOffsetbeatStrr   r   )	r-   sp1eClefeKSeTSr   rB   ms	            r#   testBeatAccessTest.testBeatAccess&  s    LL+,WWZ  

//		:@@BS)++993?++T2jjl--c.>.>?EEG3'))77=))40 jjl--e.A.ABHHJ))77=))40
 ++AKK++-. ,  M 	N ++AKK		" ,  G 	H &&v~~6AKK++-. 7WX &&v~~6AKK 7[\&&v~~6AKK		" 7[\&&v~~6AKK' 7[\r"   c                   [         R                  " S5      nSUl        [        R                  " 5       nUR                  S[        R                  " S5      5        UR                  US5        U R                  UR                   Vs/ s H  o3R                  PM     sn/ SQ5        [         R                  " SSS	9n[        R                  " 5       nUR                  S
[        R                  " S5      5        UR                  US5        [        S5       Vs/ s H  oBR                  U   R                  PM     nnU R                  / SQU5        g s  snf s  snf )Ngrk   r   4/4   )rI   r   r   r   rI   r   r   r   zE--3quarterr]   r   z2/2   )rI   r   r   r   rI   r   r   r   rI   r   r   r   )r   r?   r   r   r^   r{   r   r   repeatAppendr+   r_   r   range)r-   rB   r   eimatchs         r#   testGetBeatStrengthATest.testGetBeatStrengthAp  s    IIcNMMO	E''./	q!!'':'Q..':E	G IIf9-MMO	e))%01	q"27)<)Q(()<[]bc ; =s   E"Ec                   [         R                  " S5      nUR                  S   nS H?  nU R                  UR	                  5       R                  U5      S   R                  S5        MA     / nUR	                  5       R                   H  nUR                  UR                  5        M      U R                  U/ SQ5        [        R                  " 5       nSUl        [        R                  " 5       nSUl        [        R                  " 5       nU R                  UR                  S5        UR                  U5        U R                  UR                  S5        UR                  U5        U R                  UR                  S5        g)	z?
Test getting measure number data from various Music21Objects.
r   r   )r   r   r   r   )%r   r   rk   rk   rk   rk   rt   rt   rt   rt   r   r   r   r   r      r   r   r      r   r   r      r   r   r      r   r   r   r   r   	   r   r   r   r   J   N)r   r   r   r+   r   r   measureNumberr   r7   r   r   numberr   r?   )r-   r   r   classStrr   rB   m1m2s           r#   testMeasureNumberAccessTest.testMeasureNumberAccess  s&    LL+,WWZ AHRZZ\<<*]A/ B ++ALL) , !6 	7
 ^^	^^	IIK$/
		!!,
		!"-r"   c                   [         R                  " 5       n[         R                  " 5       n[        R                  " S5      Ul        [        R                  " S5      nSUl        UR                  U5        U R                  UR                  R                  S5        U R                  UR                  R                  S5        U R                  UR                  U5      S5        U R                  UR                  5       S5        U R                  UR                  S5        UR!                  5         U R                  UR                  R                  S5        U R                  UR                  R                  S5        U R                  UR                  U5      S5        U R                  UR"                  S5        U R                  UR                  5       S5        U R                  UR                  S5        UR                  U5        U R                  UR                  R                  S5        U R                  UR"                  S5        U R                  UR$                  S5        [         R                  " 5       n[        R                  " S5      nSUl        UR                  U5        U R                  UR                  R                  S5         UR                  R                    UR                  U5        U R                  UR                  R                  S5        U R                  UR$                  S5        U R                  UR+                  5       R,                   Vs/ s H  ofR.                  PM     snSS/5        [         R                  " 5       n[        R                  " S	5      nSUl        UR                  U5        UR                  U5        U R                  UR                  R                  S5        U R                  UR$                  S
5        U R                  UR+                  5       R,                   Vs/ s H  ofR.                  PM     sn/ SQ5        g ! [&        R(                   a     GNf = fs  snf s  snf )Nr   d2rI   r   r   r=   e2r   zf#2       @)r   rI   r   )r   Scorer   r   r   timeSignaturer   r?   r   r7   r+   barDurationr\   r|   r   r   padAsAnacrusislowestOffsethighestTimer   StreamExceptionr   r   r8   )	r-   r   r   r   r   r   rB   m3n3s	            r#   testPickupMeasuresBuiltTest.testPickupMeasuresBuilt  s9   LLN^^ ..u5YYt_
		"55s;22C8++B/5 	--/5#&
 	55s;22C8++B/5#.--/5#& 	
1137-,^^YYt_
		"22C8	NN((
 	
22C8,AIIK,E,EF,Eq((,EFc
S^^YYu
		" 	
22C8,AIIK,E,EF,Eq((,EFX1 ++ 		 G Gs   Q Q27Q7Q/.Q/c                    S U l         [        R                  " S5      nUR                  S   nUR	                  [
        R                  5      R                  5       nU R                  UR                   Vs/ s H  oDR                  PM     snSS/5        U R                  UR                  S5        UR                  5       R                   Vs/ s H  oDR                  PM     nnU R                  U/ SQ5        g s  snf s  snf )Nzbach/bwv103.6z#sopranor   r   r=   )4r   r   rI   r5   r=   r   r   g      @      @r   r   g      $@g      &@g      (@g      )@r   g      .@g      0@r   g      2@g     2@g     2@g      3@g     3@g      4@r   g      6@rW   g      8@r   g      :@g      ;@g      <@r   g      ?@g      @@g     @@@r   g      A@g     A@g      B@g     B@g      C@g     C@rv   g     D@g      E@g     E@g      F@g     @F@g     F@g     G@)maxDiffr   r   r   r   r   r   r   r+   r   r8   paddingLeftr   )r-   r   pr   rB   offsetss         r#   testPickupMeasuresImportedTest.testPickupMeasuresImported  s    LL)GGJ!!&..1779B,<,<=,<q((,<=SzJ-%&YY[%>%>?%>88%>?8	9 > @s   3C6
C;c                >   [         R                  " 5       n[        R                  " 5       nSUl        [        R                  " 5       nSUl        [
        R                  " 5       nUR                  U5        U R                  UR                  S5        UR                  U[        R                  SS9  U R                  UR                  U5      S5        UR                  U5        U R                  UR                  S5        U R                  UR                  U5      S5        g )Nrj   r   rl   T)
addElementg      I@)r   r^   r   r?   r   r   Barliner7   r+   r   coreSetElementOffsetr
   AT_ENDr|   )r-   r   r   r   b1s        r#   testHighestTimeTest.testHighestTime  s    MMOYY[YY[[[]	-	r=#7#7DI++A.5	-++A.5r"   c                   [         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[        R                  " S5      n[        R                  " S5      n[        R                  " S5      n[        R
                  " 5       n[        R                  " 5       n[        R                  " 5       n	UR                  U5        UR                  U5        UR                  U5        UR                  U5        UR                  U	5        UR                  U5        U R                  UR                  5       R                  [        R                  5      R                  5       U5        U R                  UR                  5       R                  [        R                  5      R                  5       U5        U R                  U[        R                     R                  5       U5        U R                  U[        R                     R                  5       U5        UR                  U5        U R                  [        UR                  5       R                  [        R                  5      5      XT/5        g )NCDE)r   r^   r   r?   r   r   r   PercussionClefr7   r+   recurser   r   r   list)
r-   r   r   s3r   r   r  r   r   c3s
             r#   testRecurseByClassTest.testRecurseByClass  s   ]]_]]_]]_YYs^YYs^YYs^__]]_  "
		"
		"
		"
		"
		"
		" 	88CIIKRP88CIIKRPDII,,.3DII,,.3 			"bjjl==diiHIB8Tr"   c                    [        5       nU R                  UR                  5        UR                  nU R	                  U[        R
                  5        U R                  UR                  5        g rn   )r   assertIsNone
_editorialr   r   	EditorialassertIsNotNone)r-   b2b2_eds      r#   testSetEditorialTest.testSetEditorial1  sL    _"--(eY%8%89R]]+r"   c                    [         R                  " 5       n[        R                  " U5      nU R	                  [        UR                  R                  5      [        U5      5        g rn   )r   r?   rM   rN   r+   r*   
derivationorigin)r-   r   r   s      r#   testStoreLastDeepCopyOfTest.testStoreLastDeepCopyOf8  s>    YY[]]2BMM0012b6:r"   c                p   [         R                  " 5       n[        R                  " 5       nUR	                  U5        [
        R                  " U5      nUS   nU R                  X;   5        U R                  XC;   5        U R                  X$R                  ;   5        U R                  X4R                  ;   5        g )Nr   )
r   r?   r   r^   r7   rM   rN   rO   rS   rx   )r-   r   r   r   r   s        r#   testContainsTest.testContains=  s~    YY[]]_
		"]]2U"!xx(hh'r"   c           	     j   [         R                  " 5       n[         R                  " 5       nUR                  [        R
                  " SS9S5        [        R                  " U5      n[        R                  " SSS9nUR                  SU5        [        R                  " SS	S9nUR                  SU5        UR                  X#/5        U R                  [        UR                  [        R                  5      5      S
5        U R                  [        UR                  S[        R                   S95      S5        g )Nrk   )r   r   2   r   )r   referentr      r   z(<music21.tempo.MetronomeMark Eighth=150>MetronomeMarkgetElementMethodz+<music21.tempo.MetronomeMark lento 16th=50>)r   Partr   r   r   r?   rM   rN   r   r5  r{   r7   r+   strr   r	   BEFORE_OFFSET)r-   r	  r   r   mm1mm2s         r#   testGetContextByClassATest.testGetContextByClassAI  s    KKM^^
		2A6]]2!!d;
		!S!!s;
		!S	" 	S2253F3FGHC	E 	%%#%2%@%@ &  :	;r"   c                l    " S S5      n[         R                  " 5       nUR                  [        R                  " S5      5        / n[        S5       HB  nU" 5       n[        R                  " U5      nUR                  U5        UR                  XF5        MD     U H  nU R                  Xr;   5        M     U Vs/ s H  oR                  U5      PM     n	nU R                  U	SS/5        U R                  UR                  US   5      S5        U R                  UR                  US   5      S5        g s  snf )	Nc                      \ rS rSrSrg)1Test.testElementWrapperOffsetAccess.<locals>.Mockid  r   Nr   r   r"   r#   MockrA  d  s    r"   rB  fast 6/8rt   r   rI   r   rk   )r   r^   r7   r   r   r   r   r   r{   rS   r|   r+   r   )
r-   rB  r   storager   mockelewr   r   s
             r#   testElementWrapperOffsetAccess#Test.testElementWrapperOffsetAccessc  s    	 	 MMO	$$Z01qA6D$$T*BNN2HHQO	  BOOBG$  077w!""1%w7c
+4c:4c:	 8s   8D1c                    " S S5      n[         R                  " 5       nUR                  [        R                  " S5      5        / n[        S5       H^  nU" 5       n[        R                  " U5      nUR                  U5        U R                  UR                  U5        UR                  XF5        M`     U H  nU R                  Xr;   5        M     / n/ n	/ n
UR                  [        R                  5       HX  nUR                  UR                  5        U	R                  UR                  5        U
R                  UR                  5       5        MZ     U R                  U/ SQ5        U R                  U	/ SQ5        U R                  U
/ SQ5        g )Nc                      \ rS rSrS rSrg)6Test.testGetActiveSiteTimeSignature.<locals>.Wave_readiz  c                    g)Nrt   r   )r-   s    r#   getnchannelsCTest.testGetActiveSiteTimeSignature.<locals>.Wave_read.getnchannels{  s    r"   r   N)r   r   r   r    rN  r!   r   r"   r#   	Wave_readrL  z  s    r"   rP  rC  r   )r   rI   r5   r=   r   r   )rI   r   r   rI   r   r   )rt   rt   rt   rt   rt   rt   )r   r^   r7   r   r   r   r   r   r+   objr{   rS   r   r8   r   rN  )r-   rP  r   rD  r   	soundFilerF  rG  matchOffsetmatchBeatStrengthmatchAudioChannelsjs               r#   testGetActiveSiteTimeSignature#Test.testGetActiveSiteTimeSignaturey  s=   	 	 MMO	$$Z01qA!I$$Y/BNN2RVVY/HHQO  BOOBG$  %%d&9&9:Aqxx($$Q^^4%%ann&67 ; 	&DE*,NO+-?@r"   c                   [         R                  " 5       nUR                  [        R                  " 5       S5        UR                  S[        R                  " S5      5        UR                   Vs/ s H  o"R                  PM     nnU R                  U/ SQ5        UR                   Vs/ s H  o"R                  PM     nnU R                  U/ SQ5        UR                   Vs/ s H  o"R                  R                  PM     nnU R                  U/ SQ5        UR                   Vs/ s H  o"R                  PM     nnU R                  U/ SQ5        g s  snf s  snf s  snf s  snf )Nr   r   3/4)rI   r5   r=   rI   r5   r=   rI   r5   r=   rI   r5   r=   )r   r   r   r   r   r   r   r   r   r   r   r   )rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   )rI   r   r   rI   r   r   rI   r   r   rI   r   r   )r   r^   r   r   r?   r{   r   r   r_   r   r+   r   r   r   r   r-   r   rB   r   s       r#   )testGetMeasureOffsetOrMeterModulusOffsetA.Test.testGetMeasureOffsetOrMeterModulusOffsetA  s   MMO	tyy{B'	E''./!")A) \]$%GG,GqG, \]78ww?w!--w? \])*1A1 \] * - @ 2s   /E(E!E$Ec                   [         R                  " 5       nUR                  [        R                  " 5       S5        UR                  S[        R                  " S5      5        UR                  S[        R                  " S5      5        UR                  S[        R                  " S5      5        UR                   Vs/ s H  o"R                  PM     nnU R                  U/ SQ5        UR                   Vs/ s H  o"R                  PM     nnU R                  U/ S	Q5        UR                   Vs/ s H  o"R                  PM     nnU R                  U/ S
Q5        g s  snf s  snf s  snf )Nr   r   rZ  r=   r   r  z2/4)rI   r5   r=   rI   r5   r=   r   rI   r5   rI   r5   rI   )r   r   r   r   r   r   r   r   r   r   r   r   )rI   r   r   rI   r   r   r   rI   r   rI   r   rI   )r   r^   r   r   r?   r{   r   r   r_   r   r+   r   r   r[  s       r#   )testGetMeasureOffsetOrMeterModulusOffsetB.Test.testGetMeasureOffsetOrMeterModulusOffsetB  s    MMO	tyy{B'	e))%01	e))%01	e))%01!")A) \]$%GG,GqG, \])*1A1 ^_ * - 2s   ;E4E-E#c                
   [         R                  " 5       nUR                  [        R                  " 5       S5        UR                  S[        R                  " SS95        U R                  UR                   Vs/ s H  o"R                  PM     sn/ SQ5        UR                  S[        R                  " SS95        U R                  UR                   Vs/ s H  o"R                  PM     sn/ SQ5        [         R                  " 5       nUR                  S[        R                  " SS95        UR                  [        R                  " 5       5        S	UR                  R                  5       l
        U R                  UR                  R                  5       R                  S
5        U R                  UR                  R                  S
5        UR                  [        R                  " SSS95        SUR                  S   l
        U R                  UR                  S   R                  S5        U R                  UR                  R                  S5        UR                  [        R                  " SS95        UR                  [        R                  " 5       5        SUR                  S   l
        U R                  UR                  S   R                  S5        U R                  UR                  R                  S5        g s  snf s  snf )Nr   r   x   )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   r   r5   r   C4halfr   r   rk   rI   r   rj   rt   r   g      @)r   r^   r   r   r?   r{   r   r5  r+   r_   secondsr7   r   r   r\   )r-   r   rB   r   s       r#   testSecondsPropertyATest.testSecondsPropertyA  s   MMO	tyy{B'	E''s34QWW5W))W5U	W 	
E''s34QWW5W))W5[	] ]]_
		!U((45
		$))+#& )77=22C8
		$))Dv./!!22C822C8
		%%%R01
		$))+!!22D922D93 6
 6s   8K;L c                x   [         R                  " S5      nUR                  S5      R                  S   nUR	                  S[
        R                  S9nU R                  UR                  S5        UR                  S5      nU R                  UR	                  [        R                  [
        R                  S95        g )Nz*tinynotation: 3/4 C4 D E 2/4 F G A B 1/4 cr   r   r?   r6  r  rk   )r   r   measurer_   r   r	   AFTER_OFFSETr+   rR   r$  r   r   ALL)r-   r	  rD   rC   r   s        r#   testGetContextByClass2015Test.testGetContextByClass2015  s    OOHIIIaLr"9S9ST%IIaL		M<M<MN	
r"   c                h   [         R                  " 5       n[         R                  " 5       n[         R                  " 5       nUR	                  [
        R                  " 5       S5        [        R                  " S5      Ul	        [         R                  " 5       nUR	                  [
        R                  " 5       S5        UR                  U5        UR                  U5        [         R                  " 5       n[         R                  " 5       n[        R                  " S5      Ul	        UR	                  [
        R                  " 5       S5        [         R                  " 5       nUR	                  [
        R                  " 5       S5        UR                  U5        UR                  U5        UR                  SU5        UR                  SU5        [         R                  " 5       n[         R                  " 5       n	[        R                  " S5      U	l	        U	R	                  [
        R                  " 5       S5        [         R                  " 5       n
U
R	                  [
        R                  " 5       S5        UR                  U	5        UR                  U
5        [         R                  " 5       n[         R                  " 5       n[        R                  " S5      Ul	        UR	                  [
        R                  " 5       S5        [         R                  " 5       nUR	                  [
        R                  " 5       S5        UR                  U5        UR                  U5        UR                  SU5        UR                  SU5        US   nU R                  [        UR                  [        R                  5      5      S5        g )Nr   rZ  r   r   z!<music21.meter.TimeSignature 3/4>)r   r   r8  r   r   r   r?   r   r   r   r7   r{   r+   r9  r   )r-   r   r   r   r   p2r  m4p3m5m6p4m7m8r   s                  r#   testGetContextByClassBTest.testGetContextByClassB  sG   LLN[[]^^
		Q' ..u5^^
		Q'
		"
		"[[]^^ ..u5
		Q'^^
		Q'
		"
		"	B	B[[]^^ ..u5
		Q'^^
		Q'
		"
		"[[]^^ ..u5
		Q'^^
		Q'
		"
		"	B	B V 	R11%2E2EFG<	>r"   c                \   [         R                  " 5       n[        R                  " 5       n/ nUR                   H:  n[
        R                  " 5       nUR                  U5        UR                  U5        M<     U R                  US   US   5        US   R                  5       nU R                  US   U5        U R                  US   US   R                  5       5        U R                  [        US   5      [        US   R                  5       5      5        U R                  [        US   5      [        US   R                  5       5      5        U R                  US   UR                  S   R                  5       5        U R                  US   UR                  S   R                  5       5        g )Nr   rk   r   r   r   r   r   )r   r^   r   
MajorScalepitchesr   r?   r7   r+   nextpreviousr*   r_   )r-   r   scr_   r   rB   s0Nexts          r#   	testNextATest.testNextA  s?   MMOA		AHHQKLLO 
 	q1Q4(1q6*q1Q4==?3E!Hr!A$))+7E!Hr!A$--/':; 	q1771:??#45q1771:??#45r"   c                b   [         R                  " 5       nSUl        [        R                  " S5      nUR                  U5        [         R                  " 5       nSUl        [        R                  " S5      nUR                  U5        UR                  5       nU R                  US 5        [         R                  " 5       nUR                  U5        UR                  U5        UR                  5       nU R                  XS5        U R                  UR                  [        R                  5      U5        g )Nrk   r  rt   r  )	r   r   r   r   r?   r7   r}  r+   r8  )r-   r   r   r   r   n1nextr   s          r#   	testNextBTest.testNextB1  s    ^^	YYs^
		"^^	YYs^
		" &[[]
		"
		"$+R0r"   c                ^   [         R                  " S5      nUR                  S   nUR                  5       R                  S   nU R                  [        UR                  [        R                  5      5      S5        U R                  [        UR                  [        R                  5      5      S5        UR                  [        R                  5      R                  5       nUS   nUR                  5       nU R                  XdS   S   5        US   R                  5       R                  5       nU R                  XtS   S   5        U R                  UR                   5        US   R#                  5       nU R                  XS   S   5        U R                  US   R#                  S	5      US   R                  S   5        U R                  UR#                  5       US   S
   5        UR#                  S5      n	U	R#                  S5      n
U R                  XS   5        U
R#                  S5      nU R                  XS   5        U R                  US   R                  S5      R                  S5      US
   5        US   R                  S5      R                  S5      R                  S5      nU R                  XS   5        UR                  S   Ul        UR                  5       nU R                  [        U5      S5        U R                  [        US   R                  5       5      [        U5      5        g )Nbwv66.6r   r   z!<music21.meter.TimeSignature 4/4>zf# minorr   rt   r?   rk   r   r   r   zP1: Soprano: Instrument 1)r   r   r   r   r_   r+   r9  r~  r   r   r   r   r   r   r   rS   expressionsr}  ro   )r-   r   r   nLastr   r  m3prevm3Prev2m3nm3nmm3nnm3nnn	m0viaPrevsopranoInsts                 r#   	testNextCTest.testNextCG  s   LL# WWQZ

""2&U^^E,?,?@A<	>U^^C,<,<=>#	% ((8??Aa[!R11+&&(1131+b/2++,qk qk!n-!))&18A;3D3DQ3GHXa[^4wwy!yy#{+		)$,!--i8AA)LhWXkZQK((3<<YGPPQZ[	QK0 wwqz	((*[)+FG 	Xa[1134c"g>r"   c                v   [         R                  " 5       n[        R                  " 5       nUR	                  U5        U R                  UR                  U5        [        R                  " U5      nU R                  UR                  S 5        U R                  UR                  R                  R                  U5        g rn   )r   r?   r   r^   r7   r+   ro   rM   rN   r   _activeSiter*  r+  )r-   r   r   r   s       r#   testActiveSiteCopyingATest.testActiveSiteCopyingAq  su    YY[]]_
		"+]]2bnnd+bmm**55r:r"   c                   [         R                  " S5      n[         R                  " S5      n[        R                  " X5      nUR	                  5       nU R                  XC/5        [        R                  " X!5      nU R                  [        UR	                  5       5      X515        [        R                  " X5      nU R                  UR	                  S5      U/5        U R                  [        UR	                  S5      5      XV15        U R                  [        UR	                  SS/5      5      X615        U R                  [        UR	                  SS/5      5      Xc15        g )Nrd  D4
DiminuendoDynamicWedgeSlur)
r   r?   r   r  getSpannerSitesr+   r   	Crescendosetr  )r-   r   r   sp1sssp2sp3s          r#   testSpannerSitesTest.testSpannerSites{  s   YYt_YYt_ll2"!U#   ( 	R//12SJ?
 !!")++L9C5A 	R//?@3*MR//0FGH3*U
 	R//0FGH3*Ur"   c                   S U l         [        R                  " S5      nSUl        US   S   S   nU R	                  [        U5      S5        / nUR                  5        H@  nUR                  UR                  UR                  4nUR                  [        U5      5        MB     U R	                  U/ SQ5        US   S   nU R	                  [        U5      S5        / nUR                  5        H@  nUR                  UR                  UR                  4nUR                  [        U5      5        MB     U R	                  U/ SQ5        [        R                  " U5      nS	Ul        / nUR                  5        H@  nUR                  UR                  UR                  4nUR                  [        U5      5        MB     U R	                  U/ S
Q5        / nUR                  R                  5       nSUl        US   n	U	R!                  S5      n
U R#                  Xj5        U
R                  5        H@  nUR                  UR                  UR                  4nUR                  [        U5      5        MB     U R	                  U/ SQ5        g )Nr  bachrt   r   z<music21.note.Note G#>)zL(<music21.stream.Measure 3 offset=9.0>, 0.5, <RecursionType.ELEMENTS_FIRST>)z:(<music21.stream.Part Alto>, 9.5, <RecursionType.FLATTEN>)zA(<music21.stream.Score bach>, 9.5, <RecursionType.ELEMENTS_ONLY>)z%<music21.stream.Measure 3 offset=9.0>)L(<music21.stream.Measure 3 offset=9.0>, 0.0, <RecursionType.ELEMENTS_FIRST>):(<music21.stream.Part Alto>, 9.0, <RecursionType.FLATTEN>)A(<music21.stream.Score bach>, 9.0, <RecursionType.ELEMENTS_ONLY>)i  )zO(<music21.stream.Measure 3333 offset=0.0>, 0.0, <RecursionType.ELEMENTS_FIRST>)r  r  r  
partStreamrk   r   )r  r  zG(<music21.stream.Score partStream>, 9.0, <RecursionType.ELEMENTS_ONLY>)r  )r  r   r   r*   r+   r,   contextSitessiter8   recurseTyper7   rM   rN   r   r   r   rj  r   )r-   rC   rB   siteListyyTupr   r   cPartspTempr  s              r#   testContextSitesATest.testContextSitesA  s   LL#aDGAJa":;!AFFAHHamm4DOODJ' " 	R	
 aDGa"IJ!AFFAHHamm4DOODJ' " 	R	
 ]]1	"AFFAHHamm4DOODJ' # 	R	
 ! 	q	]]1a"AFFAHHamm4DOODJ' # 	R	
r"   c                   [         R                  " 5       nSUl        [         R                  " 5       nSUl        [
        R                  " 5       nUR                  U5        UR                  U5        / nUR                  5        H'  nUR                  [        UR                  5      5        M)     U R                  USS/5        [         R                  " 5       nSUl        [         R                  " 5       nSUl        UR                  U5        UR                  U5        / nUR                  5        H'  nUR                  [        UR                  5      5        M)     U R                  U/ SQ5        / nUR                  SS	9 H'  nUR                  [        UR                  5      5        M)     U R                  U/ SQ5        / nUR                  S
S	9 H'  nUR                  [        UR                  5      5        M)     U R                  U/ SQ5        g )Nr   rk   %<music21.stream.Measure 1 offset=0.0><music21.stream.Part p1>rp  rt   )%<music21.stream.Measure 2 offset=0.0><music21.stream.Part p2>r  r  T)sortByCreationTimereverse)r  r  r  r  )r   r8  r*   r   r   r   r?   r7   r  r,   r  r+   )r-   r   r   rB   r  r  rp  r   s           r#   testContextSitesBTest.testContextSitesB  s   [[]^^	IIK
		!
		"!AOODL) "$K$>$@ 	A[[]^^	
		!
		"!AOODL) " $@ 	A
 48AOODL) 9 $@ 	A
 9=AOODL) > $@ 	Ar"   c                   [         R                  " S5      n[         R                  " S5      n[        R                  " 5       nUR	                  SU5        [        R                  " 5       nUR	                  SU5        [        R
                  " X4/5      nU R                  UR                  U5        U R                  UR                  [         R                  SS95        g )Nr  r  r   rk   TactiveSiteOnly)r   r?   r   Voicer{   r   r   ro   r!  r}  GeneralNote)r-   v1_n1v2_n1v1v2_s         r#   testContextSitesVoicesTest.testContextSitesVoices  s    		#		#\\^
		!U\\^
		!UNNB8$e&&+%**T%5%5d*KLr"   c                ^   [         R                  " [        R                  " 5       [        R                  " 5       /5      nUR	                  5       nUR                  UR                  R                  5       5        U R                  UR                  R                  5       R                  SS95        g )NTr  )r   r   r   r?   makeNotationremover_   lastr!  r   r}  )r-   r   mCopys      r#   testContextSitesDerivations Test.testContextSitesDerivations  so    NNDIIK56 U[[%%'(%++++-22$2GHr"   c                    [        5       nU R                  [        5         UR                  [        SSS9  S S S 5        g ! , (       d  f       g = f)NT)priorityTargetOnlyfollowDerivation)r   rz   
ValueErrorr   r   )r-   rQ  s     r#    testContextInconsistentArguments%Test.testContextInconsistentArguments  s?    oz*!!#'!% "  +**s	   ?
Ac                *   [         R                  " S5      n[         R                  " S5      n[        R                  " 5       nUR	                  SU5        UR	                  SU5        U R                  UR                  5       U5        U R                  US   R                  5       U5        [        R                  " U5      nU R                  US   R                  5       US   5        [         R                  " S5      n[         R                  " S5      n[        R                  " 5       n[        R                  " 5       nSUl        UR	                  SU5        UR	                  SU5        [        R                  " 5       nUR	                  SU5        SUl        UR                  U5        U R                  UR                  S5      U5        U R                  US   S   U5        U R                  US   S   R                  S5      U5        UR                  S5      nUS   S   n	U R                  U	R                  R                   S5        US   S   n
U R                  U
R                  R                   S	5        U
R                  S5      nU R                  X5        g )
Nr  r  r   rk   rt   r?   M3r  zF#)r   r?   r   r^   r{   r   r~  rM   rN   r8  r   r   r7   	transposer+   rP   rR   )r-   e1r   r   r   vr   r   weCopy1eCopy2prevs               r#   testPreviousAfterDeepcopyTest.testPreviousAfterDeepcopy>  s   YYs^YYs^MMO	B	BbkkmR(admmor*]]1benn&1.YYs^YYs^KKM^^	
		!R	B^^
		!R		bkk&)2.ad1gr"ad1g&&v.3KK 1a**C01a**D1v&d#r"   c                    [        5       n[        5       nSnUSUR                   3-  nU R                  [        U5         UR                  Ul        SSS5        g! , (       d  f       g= f)z~
It is not recommended to copy .id values between objects without being
sure the original .id value is not a memory location.
z;Setting an ID that could be mistaken for a memory location zis discouraged: got N)r   r*   assertWarnsRegexWarning)r-   rQ  obj2msgs       r#   testWarnCopyingIdsTest.testWarnCopyingIdsc  sT    
 oK%cffX..""7C0ffDG 100s   A
A()r  N)0r   r   r   r    r0   r:   rE   rT   rX   rc   rg   r}   r   r   r   r   r   r   r   r   r  r  r  r  r'  r,  r/  r=  rH  rW  r\  r_  rg  rm  rx  r  r  r  r  r  r  r  r  r  r  r  r  r!   r   r"   r#   r%   r%   )   s    W
(	"-")
)	'%5N*(**,3\'AR?*H]Td".:JYX9(6&U@,;

(;4;,A@^$` :@	
4>l6*1,(?T;V:=
~*AX
MIR#$J
r"   r%   __main__)!
__future__r   rM   unittestmusic21r   r   music21.baser   r   r   music21.common.enumsr	   r
   r   r   r   r   r   r   r   r   r   music21.sitesr   r   r   r   r   TestCaser%   r   mainTestr   r"   r#   <module>r     s    #     6  =           (   	} 	D8 DP" zT r"   