
    3j1                    x   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 d dlm
Z
 d dlmZ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  G d de      Z G d dej:                        Zedk(  rd dlZ ej@                  e       yy)    )annotationsN)bar)base)Music21ObjectElementWrapper)clef)ElementSearchOffsetSpecial)	converter)corpus)dynamics)	editorial)exceptions21)key)meter)note)scale)SitesException)spanner)stream)tempoc                      e Zd Zy)
MockObjectN__name__
__module____qualname__     C/DATA/.local/lib/python3.12/site-packages/music21/test/test_base.pyr   r   $   s    r   r   c                     e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd 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-y,)-Testc                    t        j                         }t        t        |            }| j	                  t        |      d| d       y )Nz&<music21.base.Music21Object object at >)r   r   hexidassertEqualrepr)selfaaddresss      r    testM21ObjReprzTest.testM21ObjRepr*   s<     be*a$J7)ST"UVr   c                    t               }|j                  j                  d       d|_        d|_        | j                  |j                  d       y )Nhellohi       @)r   groupsappendr&   offsetr'   r)   r*   s     r    testObjectCreationzTest.testObjectCreation/   s;    L	 3'r   c                   t        j                  d      }t        |      }d|_        t        |      }d|_        | j	                  ||       | j                  ||       t        t        j                  d            }| j                  ||       y )NzF-      @r0   G)r   Noter   r3   r'   assertIsNotassertNotEqual)r)   nr*   cbs        r    testElementEqualityzTest.testElementEquality6   ss    IIdO11AA499S>*Aq!r   c                ,   t        j                  d      }d|_        |j                  j	                  d       t        j                  |      }d|_        | j                  ||u        d|j                  _	        | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       d|j                  d<   | j                  d|j                  v        | j                  d|j                  v        y )NA      ?fluter0   -bassoonr   )r   r9   r3   r1   r2   copydeepcopyassertFalsepitch
accidentalr'   name
assertTrue)r)   r<   r>   s      r    testNoteCreationzTest.testNoteCreationA   s    IIcN	 MM!a  %3'3'AHH,-188+,r   c                    t        t        j                  d            }d|_        | j	                  |j                  d       y )NzA#      7@)r   r   r9   r3   r'   r4   s     r    testOffsetszTest.testOffsetsR   s/    499T?+4(r   c                    t        j                  d      }d|j                  _        t	        j
                         }|j                  |       |j                  }y )NzB-whole)r   r9   durationtyper   Streamr2   notes)r)   note1stream1unused_subStreams       r    testObjectsAndElementszTest.testObjectsAndElementsW   s<    		$%--/u"==r   c                    t               }d|_        t        j                  |      }| j	                  ||       | j                  ||       | j                  |j                  d       y)z
        Test copying
        testN)r   r&   rF   rG   r:   r'   )r)   r*   r>   s      r    testM21BaseDeepcopyzTest.testM21BaseDeepcopy^   sT     OMM!AAv&r   c                F   t        j                         }t        j                         }d|_        | j                  t        |j                        d       | j                  |j                  d       | j                  |j                  d       d }| j                  t        |||       |j                  |       | j                  t        |j                        d       | j                  |j                  |       d|_        | j                  |j                  |       | j                  |j                  d       d|_        | j                  |j                  d       | j                  t        |j                        d       | j                  |j                  |      d       y)	z8
        Basic testing of M21 base object sites
                    >@c                    || _         y N)
activeSite)aabbs     r    assignActiveSitez/Test.testM21BaseSites.<locals>.assignActiveSitex   s	    BMr      (         D@N)r   r   r   rU   r3   r'   lensites_naiveOffsetassertRaisesr   insertrd   getOffsetBySite)r)   r*   r>   rg   s       r    testM21BaseSiteszTest.testM21BaseSitesi   s:     MMO QWWq).4(	 	.*:AqA	QWWq)q)q) 	4( 4(QWWq)**1-t4r   c                   t        j                         }d|_        t        j                         }d|_        d|_        |j                  d|       t        j                  |      }d|_        | j                  t        |j                        d       |j                  }| j                  t        |j                        d       y)	z2
        Basic testing of M21 base object
        za objzb objr\   r   zc objrh   r`   N)r   rU   r&   r   r   ro   rF   rG   r'   rk   rl   )r)   r*   r>   r=   dummys        r    testM21BaseLocationsCopyzTest.testM21BaseLocationsCopy   s     MMO 	AMM! 	QWWq)QWWq)r   c                   t        j                         }t        j                         }d|_        |j                  d|       ||_        t        j                         }| j                  |j                  |       | j                  t        |j                        d       t        j                  |      }| j                  |j                  d        |j                  d|       | j                  t        |j                        d       y )Nr\   r_   rh      )r   rU   r   r   r&   ro   rd   r'   rk   rl   rF   rG   assertIs)r)   r*   r>   dr=   s        r    testM21BaseLocationsCopyBzTest.testM21BaseLocationsCopyB   s     MMO 	QMMOq)QWWq)MM!allD)	QQWWq)r   c                   t        j                  d      }t        j                  d      }t        j                  d      }|j	                  d|       |j	                  d|       t        j                         }t        j                         }t        j                  d      }|j	                  d|       |j	                  d|       |j	                  d|       | j                  |j                  |      d       | j                  |j                         j                  d      |       | j                  |j                         j                  d      |       | j                  |j                         j                  d	      |       | j                  |j                         j                  d
      |       | j                  |j                  |j                               d
       | j                  |j                         j                  |      d
       |j                  t
        j                        }| j                  |t
        j                         |j                  t
        j                        }| j                  |t
        j                         |j                  t
        j                        }| j                  |d        |j                  t
        j                        }| j                  |t
        j                         y )NrA   Bs1)r&   
   d   s2r   rv   n   )r   r9   r   rU   ro   r   
TrebleClefBassClefr'   rp   flattengetElementAtOrBeforeelementOffsetgetContextByClassassertIsInstance)r)   n1n2r|   c1c2r   posts           r    testSitesSearchz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                @   t        j                  d      }|j                  d   j                  t        j
                        j	                         }| j                  |d   j                  |       | j                  |j                  d   |d   j                         |d   j                  t        j                        }| j                  |d   t        j                         | j                  t        |j                  d   j!                         j"                  |j                  d   d          |j                  d   d   j%                  t        j                        }| j                  |t        j                         |d   j%                  t        j                        }| j                  |t        j                         t	        j&                         }|j)                  d|d          | j+                  ||d   j                  v        | j+                  ||d   j                  v        | j+                  |j                  d   |d   j                  v        |d   j%                  t        j                        }| j+                  t-        |t        j                        |       y)z=
        Can a measure determine the last Clef used?
        zbach/bwv324.xmlr   r`      N)r   parsepartsgetElementsByClassr   Measurer'   rd   assertInrl   r   Clefr   r   rn   r   r   r   r   rU   ro   rL   
isinstance)r)   r*   measuresr   	newStreams        r    testSitesMeasuresz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(	Xa[%6%667HQK$5$556
hqk&7&778 |--dii8
494@r   c                ^   t        j                         }d|_        t        j                         }d|_        t        j                         }|j                  |       |j                  |       t        j                         }d|_        |j                  d|       |j                  dt        j                  g      }| j                  t        |t        j                        |       |j                  t        j                        }| j                  t        |t        j                        |       y )NsOutersInnerr   )r   rU   r&   r   r9   r2   r   AltoClefpriorityro   r   r   rL   r   r   )r)   r   r   r<   altoClefprer   s          r    testSitesClefzTest.testSitesClef  s    		IIKaf ==?a"))!dii[9
36< ''		2
47>r   c                   t        j                  d      }|j                  d   }|j                         j	                  t
        j                        j                         }| j                  |j                  d       | j                  |j                  j                  d       | j                  |j                  d       |j                         j	                  t        j                        j                         }| j                  |j                  d       | j                  |j                  j                  d       | j                  |j                  d       |j                         j	                  t        j                         j                         }| j                  |j                  j                  d       | j                  |j                  d       g }|j                         j"                  D ]!  }|j%                  |j'                                # | j                  |g d       g }|j                         j"                  D ]  }|j%                  |j(                          | j                  |g d       g }|j	                  t*        j,                        D ]!  }|j%                  |j'                                # | j                  |g d       g }|j	                  t*        j,                        D ]  }|j%                  |j                          | j                  |g d	       g }|j	                  t*        j,                        D ]  }|j%                  |j(                          | j                  |g d	       g }|j	                  t*        j,                        D ]  }|j%                  |j                          | j                  |g d	       y
)zE
        Test getting beat data from various Music21Objects.
        bach/bwv66.6.xml#Soprano      @rB         ?)%r7   g      @        rB   r0   r7   r   rB   r0   r7   r         ?rB   r0   r7   r   rB   r0   r7   r   rB   r0   r7   r   rB   r0   r7   r   rB   r0   r   r0   r7   r   rB   g      ?r0   )%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   rB         @      "@      *@      1@      5@      9@      =@     @@)
NNNNNNNNNNN)r   r   r   r   r   r   r   firstr'   beatbeatDurationquarterLengthbeatStrengthr   KeySignaturer   TimeSignaturenotesAndRestsr2   _getMeasureOffsetbeatStrr   r   )	r)   sp1eClefeKSeTSr   r<   ms	            r    testBeatAccessz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                   t        j                  d      }d|_        t        j                         }|j                  dt        j                  d             |j                  |d       | j                  |j                  D cg c]  }|j                   c}g d       t        j                  dd	      }t        j                         }|j                  d
t        j                  d             |j                  |d       t        d      D cg c]  }|j                  |   j                   }}| j                  g d|       y c c}w c c}w )Ngr`   r   4/4   )rB   r   r   r   rB   r   r   r   zE--3quarterrT   r   z2/2   )rB   r   r   r   rB   r   r   r   rB   r   r   r   )r   r9   r   r   rU   ro   r   r   repeatAppendr'   rV   r   range)r)   r<   r   eimatchs         r    testGetBeatStrengthAzTest.testGetBeatStrengthAo  s    IIcNMMO	E''./	q!!'':'Q!..':E	G IIf9-MMO	e))%01	q"27)<)Q(()<[]bc ; =s   E E	c                   t        j                  d      }|j                  d   }dD ]>  }| j                  |j	                         j                  |      d   j                  d       @ g }|j	                         j                  D ]  }|j                  |j                          | j                  |g d       t        j                         }d|_        t        j                         }d|_        t        j                         }| j                  |j                  d       |j                  |       | j                  |j                  d       |j                  |       | j                  |j                  d       y)	zO
        Test getting measure number data from various Music21Objects.
        r   r   )r   r   r   r   )%r   r   r`   r`   r`   r`   rh   rh   rh   rh   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   r2   r   r   numberr   r9   )r)   r   r   classStrr   r<   m1m2s           r    testMeasureNumberAccesszTest.testMeasureNumberAccess  s&    LL+,WWZ AHRZZ\<<*]A/ B ++ALL) , !6 	7
 ^^	^^	IIK$/
		!!,
		!"-r   c                   t        j                         }t        j                         }t        j                  d      |_        t        j                  d      }d|_        |j                  |       | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |j                  |      d       | j                  |j                         d       | j                  |j                  d       |j!                          | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |j                  |      d       | j                  |j"                  d       | j                  |j                         d       | j                  |j                  d       |j                  |       | j                  |j                  j                  d       | j                  |j"                  d       | j                  |j$                  d       t        j                         }t        j                  d      }d|_        |j                  |       | j                  |j                  j                  d       	 |j                  j                   |j                  |       | j                  |j                  j                  d       | j                  |j$                  d       | j                  |j+                         j,                  D cg c]  }|j.                   c}ddg       t        j                         }t        j                  d	      }d|_        |j                  |       |j                  |       | j                  |j                  j                  d       | j                  |j$                  d
       | j                  |j+                         j,                  D cg c]  }|j.                   c}g d       y # t&        j(                  $ r Y w xY wc c}w c c}w )Nr   d2rB   r   r   r7   e2r   zf#2       @)r   rB   r   )r   Scorer   r   r   timeSignaturer   r9   r   r2   r'   barDurationrS   rp   r   r   padAsAnacrusislowestOffsethighestTimer   StreamExceptionr   r   r3   )	r)   r   r   r   r   r   r<   m3n3s	            r    testPickupMeasuresBuiltzTest.testPickupMeasuresBuilt  s=   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 Q%-Q*Q"!Q"c                   d | _         t        j                  d      }|j                  d   }|j	                  t
        j                        j                         }| j                  |j                  D cg c]  }|j                   c}ddg       | j                  |j                  d       |j                         j                  D cg c]  }|j                   }}| j                  |g d       y c c}w c c}w )Nzbach/bwv103.6z#sopranor   r   r7   )4r   r   rB   r0   r7   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@rO   g      8@r   g      :@g      ;@g      <@r   g      ?@g      @@g     @@@r   g      A@g     A@g      B@g     B@g      C@g     C@rj   g     D@g      E@g     E@g      F@g     @F@g     F@g     G@)maxDiffr   r   r   r   r   r   r   r'   r   r3   paddingLeftr   )r)   r   pr   r<   offsetss         r    testPickupMeasuresImportedzTest.testPickupMeasuresImported  s    LL)GGJ!!&..1779B,<,<=,<q!((,<=SzJ-%&YY[%>%>?%>188%>?8	9 > @s   2C1C6c                <   t        j                         }t        j                         }d|_        t        j                         }d|_        t        j                         }|j                  |       | j                  |j                  d       |j                  |t        j                  d       | j                  |j                  |      d       |j                  |       | j                  |j                  d       | j                  |j                  |      d       y )Nr_   rv   ra   T)
addElementg      I@)r   rU   r   r9   r   r   Barliner2   r'   r   coreSetElementOffsetr
   AT_ENDrp   )r)   r   r   r   b1s        r    testHighestTimezTest.testHighestTime  s    MMOYY[YY[[[]	-	r=#7#7DI++A.5	-++A.5r   c                   t        j                         }t        j                         }t        j                         }t        j                  d      }t        j                  d      }t        j                  d      }t	        j
                         }t	        j                         }t	        j                         }	|j                  |       |j                  |       |j                  |       |j                  |       |j                  |	       |j                  |       | j                  |j                         j                  t        j                        j                         |       | j                  |j                         j                  t        j                        j                         |       | j                  |t        j                     j                         |       | j                  |t        j                     j                         |       |j                  |       | j                  t        |j                         j                  t        j                              ||g       y )NCDE)r   rU   r   r9   r   r   r   PercussionClefr2   r'   recurser   r   r   list)
r)   r|   r   s3r   r   r   r   r   c3s
             r    testRecurseByClassz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IBPR8Tr   c                    t               }| j                  |j                         |j                  }| j	                  |t        j
                         | j                  |j                         y rc   )r   assertIsNone
_editorialr   r   	EditorialassertIsNotNone)r)   b2b2_eds      r    testSetEditorialzTest.testSetEditorial0  sL    _"--(eY%8%89R]]+r   c                    t        j                         }t        j                  |      }| j	                  t        |j                  j                        t        |             y rc   )r   r9   rF   rG   r'   r&   
derivationorigin)r)   r   r   s      r    testStoreLastDeepCopyOfzTest.testStoreLastDeepCopyOf7  s>    YY[]]2BMM0012b6:r   c                j   t        j                         }t        j                         }|j	                  |       t        j                  |      }|d   }| j                  ||v        | j                  ||v        | j                  ||j                  v        | j                  ||j                  v        y )Nr   )
r   r9   r   rU   r2   rF   rG   rH   rL   rl   )r)   r   r|   r   r   s        r    testContainszTest.testContains<  s    YY[]]_
		"]]2Ur"b!rxx(bhh'r   c                x   t        j                         }t        j                         }|j                  t	        j
                  d      d       t        j                  |      }t        j                  dd      }|j                  d|       t        j                  dd	      }|j                  d|       |j                  ||g       | j                  t        |j                  t        j                              d
       | j                  t        |j                  dt        j                               d       y )Nr`   )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   r9   rF   rG   r   r  ro   r2   r'   strr   r	   BEFORE_OFFSET)r)   r   r   r   mm1mm2s         r    testGetContextByClassAzTest.testGetContextByClassAH  s    KKM^^
		2A6]]2!!d;
		!S!!s;
		!S	"b 	S2253F3FGHC	E 	%%#%2%@%@ &  :	;r   c                \    G d d      }t        j                         }|j                  t        j                  d             g }t        d      D ]A  } |       }t        j                  |      }|j                  |       |j                  ||       C |D ]  }| j                  ||v         |D cg c]  }|j                  |       }	}| j                  |	ddg       | j                  |j                  |d         d       | j                  |j                  |d         d       y c c}w )	Nc                      e Zd Zy)1Test.testElementWrapperOffsetAccess.<locals>.MockNr   r   r   r    Mockr$  c  s    r   r%  fast 6/8rh   r   rB   r   r`   )r   rU   r2   r   r   r   r   r   ro   rL   rp   r'   r   )
r)   r%  r   storager   mockelewr   r   s
             r    testElementWrapperOffsetAccessz#Test.testElementWrapperOffsetAccessb  s   	 	 MMO	$$Z01qA6D$$T*BNN2HHQO	  BOOB!G$  077w!""1%w7c
+4c:4c:	 8s   2D)c                    G d d      }t        j                         }|j                  t        j                  d             g }t        d      D ]]  } |       }t        j                  |      }|j                  |       | j                  |j                  |       |j                  ||       _ |D ]  }| j                  ||v         g }g }	g }
|j                  t        j                        D ]W  }|j                  |j                         |	j                  |j                         |
j                  |j                                Y | j                  |g d       | j                  |	g d       | j                  |
g d       y )Nc                      e Zd Zd Zy)6Test.testGetActiveSiteTimeSignature.<locals>.Wave_readc                     y)Nrh   r   )r)   s    r    getnchannelszCTest.testGetActiveSiteTimeSignature.<locals>.Wave_read.getnchannelsz  s    r   N)r   r   r   r0  r   r   r    	Wave_readr.  y  s    r   r1  r&  r   )r   rB   r0   r7   r   r   )rB   r   r   rB   r   r   )rh   rh   rh   rh   rh   rh   )r   rU   r2   r   r   r   r   r   r'   objro   rL   r   r3   r   r0  )r)   r1  r   r'  r   	soundFiler)  r*  matchOffsetmatchBeatStrengthmatchAudioChannelsjs               r    testGetActiveSiteTimeSignaturez#Test.testGetActiveSiteTimeSignaturex  sA   	 	 MMO	$$Z01qA!I$$Y/BNN2RVVY/HHQO  BOOB!G$  %%d&9&9:Aqxx($$Q^^4%%ann&67 ; 	&DE*,NO+-?@r   c                   t        j                         }|j                  t        j                         d       |j                  dt        j                  d             |j                  D cg c]  }|j                   }}| j                  |g d       |j                  D cg c]  }|j                   }}| j                  |g d       |j                  D cg c]  }|j                  j                   }}| j                  |g d       |j                  D cg c]  }|j                   }}| j                  |g d       y c c}w c c}w c c}w c c}w )Nr   r   3/4)rB   r0   r7   rB   r0   r7   rB   r0   r7   rB   r0   r7   )r   r   r   r   r   r   r   r   r   r   r   r   )rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   )rB   r   r   rB   r   r   rB   r   r   rB   r   r   )r   rU   r   r   r9   ro   r   r   rV   r   r'   r   r   r   r   r)   r   r<   r   s       r    )testGetMeasureOffsetOrMeterModulusOffsetAz.Test.testGetMeasureOffsetOrMeterModulusOffsetA  s	   MMO	tyy{B'	E''./!")A) \]$%GG,GqG, \]78ww?w!--w? \])*1A1 \] * - @ 2s   ,E#E
EEc                   t        j                         }|j                  t        j                         d       |j                  dt        j                  d             |j                  dt        j                  d             |j                  dt        j                  d             |j                  D cg c]  }|j                   }}| j                  |g d       |j                  D cg c]  }|j                   }}| j                  |g d	       |j                  D cg c]  }|j                   }}| j                  |g d
       y c c}w c c}w c c}w )Nr   r   r:  r7   r   r   z2/4)rB   r0   r7   rB   r0   r7   r   rB   r0   rB   r0   rB   )r   r   r   r   r   r   r   r   r   r   r   r   )rB   r   r   rB   r   r   r   rB   r   rB   r   rB   )r   rU   r   r   r9   ro   r   r   rV   r   r'   r   r   r;  s       r    )testGetMeasureOffsetOrMeterModulusOffsetBz.Test.testGetMeasureOffsetOrMeterModulusOffsetB  s   MMO	tyy{B'	e))%01	e))%01	e))%01!")A) \]$%GG,GqG, \])*1A1 ^_ * - 2s   6E-E$Ec                   t        j                         }|j                  t        j                         d       |j                  dt        j                  d             | j                  |j                  D cg c]  }|j                   c}g d       |j                  dt        j                  d             | j                  |j                  D cg c]  }|j                   c}g d       t        j                         }|j                  dt        j                  d             |j                  t        j                                d	|j                  j                         _
        | j                  |j                  j                         j                  d
       | j                  |j                  j                  d
       |j                  t        j                  dd             d|j                  d   _
        | j                  |j                  d   j                  d       | j                  |j                  j                  d       |j                  t        j                  d             |j                  t        j                                d|j                  d   _
        | j                  |j                  d   j                  d       | j                  |j                  j                  d       y c c}w c c}w )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   r0   r   C4halfr   r   r`   rB   r   r_   rh   r   g      @)r   rU   r   r   r9   ro   r   r  r'   rV   secondsr2   r   r   rS   )r)   r   r<   r   s       r    testSecondsPropertyAz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                   t        j                  d      }|j                  d      j                  d   }|j	                  dt
        j                        }| j                  |j                  d       |j                  d      }| j                  |j	                  t        j                  t
        j                               y )Nz*tinynotation: 3/4 C4 D E 2/4 F G A B 1/4 cr   r   r9   r  r   r`   )r   r   measurerV   r   r	   AFTER_OFFSETr'   rK   r  r   r   ALL)r)   r   r>   r=   r   s        r    testGetContextByClass2015zTest.testGetContextByClass2015  s    OOHIIIaLr"9S9ST%IIaL		M<M<MN	
r   c                6   t        j                         }t        j                         }t        j                         }|j	                  t        j                         d       t        j                  d      |_	        t        j                         }|j	                  t        j                         d       |j                  |       |j                  |       t        j                         }t        j                         }t        j                  d      |_	        |j	                  t        j                         d       t        j                         }|j	                  t        j                         d       |j                  |       |j                  |       |j                  d|       |j                  d|       t        j                         }t        j                         }	t        j                  d      |	_	        |	j	                  t        j                         d       t        j                         }
|
j	                  t        j                         d       |j                  |	       |j                  |
       t        j                         }t        j                         }t        j                  d      |_	        |j	                  t        j                         d       t        j                         }|j	                  t        j                         d       |j                  |       |j                  |       |j                  d|       |j                  d|       |d   }| j                  t        |j                  t        j                              d       y )Nr   r:  r   r   z!<music21.meter.TimeSignature 3/4>)r   r   r  r   r   r   r9   r   r   r   r2   ro   r'   r  r   )r)   r   r   r   r   p2r   m4p3m5m6p4m7m8r   s                  r    testGetContextByClassBz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   t        j                         }t        j                         }g }|j                  D ]8  }t        j                         }|j                  |       |j                  |       : | j                  |d   |d          |d   j                         }| j                  |d   |       | j                  |d   |d   j                                | j                  t        |d         t        |d   j                                      | j                  t        |d         t        |d   j                                      | j                  |d   |j                  d   j                                | j                  |d   |j                  d   j                                y )Nr   r`   r   r   r   r   r   )r   rU   r   
MajorScalepitchesr   r9   r2   r'   nextpreviousr&   rV   )r)   r   scrV   r   r<   s0Nexts          r    	testNextAz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                Z   t        j                         }d|_        t        j                  d      }|j                  |       t        j                         }d|_        t        j                  d      }|j                  |       |j                         }| j                  |d        t        j                         }|j                  |       |j                  |       |j                         }| j                  ||       | j                  |j                  t        j                        |       y )Nr`   r   rh   r   )	r   r   r   r   r9   r2   rX  r'   r  )r)   r   r   r   r   n1nextr   s          r    	testNextBzTest.testNextB0  s    ^^	YYs^
		"^^	YYs^
		" &[[]
		"
		"$+R0r   c                h   t        j                  d      }|j                  d   }|j                         j                  d   }| j                  t        |j                  t        j                              d       | j                  t        |j                  t        j                              d       |j                  t        j                        j                         }|d   }|j                         }| j                  ||d   d          |d   j                         j                         }| j                  ||d   d          | j                  |j                          |d   j#                         }| j                  ||d   d          | j                  |d   j#                  d	      |d   j                  d          | j                  |j#                         |d   d
          |j#                  d      }	|	j#                  d      }
| j                  |
|d          |
j#                  d      }| j                  ||d          | j                  |d   j                  d      j                  d      |d
          |d   j                  d      j                  d      j                  d      }| j                  ||d          |j                  d   |_        |j                         }| j                  t        |      d       | j                  t        |d   j                               t        |             y )Nbwv66.6r   r   z!<music21.meter.TimeSignature 4/4>zf# minorr   rh   r9   r`   r   r   r   zP1: Soprano: Instrument 1)r   r   r   r   rV   r'   r  rY  r   r   r   r   r   r   r   rL   expressionsrX  rd   )r)   r   r   nLastr   r   m3prevm3Prev2m3nm3nmm3nnm3nnn	m0viaPrevsopranoInsts                 r    	testNextCzTest.testNextCF  s   LL# WWQZ

""2&U^^E,?,?@A<	>U^^C,<,<=>#	% ((8??Aa[!R11+&&(113(1+b/2++,qk hqk!n-!))&18A;3D3DQ3GHXa[^4wwy!yy#x{+		)$,!--i8AA)LhWXkZQK((3<<YGPPQZ[	HQK0 wwqz	((*[)+FG 	Xa[1134c"g>r   c                p   t        j                         }t        j                         }|j	                  |       | j                  |j                  |       t        j                  |      }| j                  |j                  d        | j                  |j                  j                  j                  |       y rc   )r   r9   r   rU   r2   r'   rd   rF   rG   rw   _activeSiter  r  )r)   r   r|   r   s       r    testActiveSiteCopyingAzTest.testActiveSiteCopyingAp  su    YY[]]_
		"+]]2bnnd+bmm**55r:r   c                   t        j                  d      }t        j                  d      }t        j                  ||      }|j	                         }| j                  ||g       t        j                  ||      }| j                  t        |j	                               ||h       t        j                  ||      }| j                  |j	                  d      |g       | j                  t        |j	                  d            ||h       | j                  t        |j	                  ddg            ||h       | j                  t        |j	                  ddg            ||h       y )NrB  D4
DiminuendoDynamicWedgeSlur)
r   r9   r   ru  getSpannerSitesr'   r   	Crescendosetrs  )r)   r   r   sp1sssp2sp3s          r    testSpannerSiteszTest.testSpannerSitesz  s1   YYt_YYt_ll2r"!cU#   R( 	R//12S#J?
 !!"b)++L9C5A 	R//?@3*MR//0FGH3PS*U
 	R//0FGH3PS*Ur   c                   d | _         t        j                  d      }d|_        |d   d   d   }| j	                  t        |      d       g }|j                         D ]?  }|j                  |j                  |j                  f}|j                  t        |             A | j	                  |g d       |d   d   }| j	                  t        |      d       g }|j                         D ]?  }|j                  |j                  |j                  f}|j                  t        |             A | j	                  |g d       t        j                  |      }d	|_        g }|j                         D ]?  }|j                  |j                  |j                  f}|j                  t        |             A | j	                  |g d
       g }|j                  j                         }d|_        |d   }	|	j!                  d      }
| j#                  ||
       |
j                         D ]?  }|j                  |j                  |j                  f}|j                  t        |             A | j	                  |g d       y )Nra  bachrh   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  
partStreamr`   r   )r  r  zG(<music21.stream.Score partStream>, 9.0, <RecursionType.ELEMENTS_ONLY>)r  )r   r   r   r&   r'   r(   contextSitessiter3   recurseTyper2   rF   rG   r   r   r   rG  rw   )r)   r=   r<   siteListyyTupr   r   cPartspTempr   s              r    testContextSitesAz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                   t        j                         }d|_        t        j                         }d|_        t        j                         }|j                  |       |j                  |       g }|j                         D ]&  }|j                  t        |j                               ( | j                  |ddg       t        j                         }d|_        t        j                         }d|_        |j                  |       |j                  |       g }|j                         D ]&  }|j                  t        |j                               ( | j                  |g d       g }|j                  d	      D ]&  }|j                  t        |j                               ( | j                  |g d       g }|j                  d
	      D ]&  }|j                  t        |j                               ( | j                  |g d       y )Nr   r`   %<music21.stream.Measure 1 offset=0.0><music21.stream.Part p1>rL  rh   )%<music21.stream.Measure 2 offset=0.0><music21.stream.Part p2>r  r  T)sortByCreationTimereverse)r  r  r  r  )r   r  r&   r   r   r   r9   r2   r  r(   r  r'   )r)   r   r   r<   r  r  rL  r   s           r    testContextSitesBz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                   t        j                  d      }t        j                  d      }t        j                         }|j	                  d|       t        j                         }|j	                  d|       t        j
                  ||g      }| j                  |j                  |       | j                  |j                  t         j                  d             y )Nr   r   r   r`   TactiveSiteOnly)r   r9   r   Voicero   r   rw   rd   r  rX  GeneralNote)r)   v1_n1v2_n1v1v2_s         r    testContextSitesVoiceszTest.testContextSitesVoices  s    		#		#\\^
		!U\\^
		!UNNB8$e&&+%**T%5%5d*KLr   c                ^   t        j                  t        j                         t        j                         g      }|j	                         }|j                  |j                  j                                | j                  |j                  j                         j                  d             y )NTr  )r   r   r   r9   makeNotationremoverV   lastr  r   rX  )r)   r   mCopys      r    testContextSitesDerivationsz Test.testContextSitesDerivations  so    NNDIIK56 U[[%%'(%++++-22$2GHr   c                    t               }| j                  t              5  |j                  t        dd       d d d        y # 1 sw Y   y xY w)NT)priorityTargetOnlyfollowDerivation)r   rn   
ValueErrorr   r   )r)   r2  s     r     testContextInconsistentArgumentsz%Test.testContextInconsistentArguments  s?    oz*!!#'!% "  +**s   AAc                   t        j                  d      }t        j                  d      }t        j                         }|j	                  d|       |j	                  d|       | j                  |j                         |       | j                  |d   j                         |       t        j                  |      }| j                  |d   j                         |d          t        j                  d      }t        j                  d      }t        j                         }t        j                         }d|_        |j	                  d|       |j	                  d|       t        j                         }|j	                  d|       d|_        |j                  |       | j                  |j                  d      |       | j                  |d   d   |       | j                  |d   d   j                  d      |       |j                  d      }|d   d   }	| j                  |	j                  j                   d       |d   d   }
| j                  |
j                  j                   d	       |
j                  d      }| j                  ||	       y )
Nr   r   r   r`   rh   r9   M3r   zF#)r   r9   r   rU   ro   rw   rY  rF   rG   r  r   r   r2   	transposer'   rI   rK   )r)   e1r   r   r   vr   r   weCopy1eCopy2prevs               r    testPreviousAfterDeepcopyz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&dF#r   c                    t               }t               }d}|d|j                   z  }| j                  t        |      5  |j                  |_        ddd       y# 1 sw Y   yxY w)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)   r2  obj2msgs       r    testWarnCopyingIdszTest.testWarnCopyingIdsb  sT    
 oK%cffX..""7C0ffDG 100s   AA#N).r   r   r   r,   r5   r?   rM   rP   rZ   r]   rq   rt   ry   r   r   r   r   r   r   r   r   r   r  r  r  r  r!  r+  r8  r<  r>  rE  rJ  rT  r\  r_  rm  rp  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   rF   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GT r   