
    rhs                     F   S SK r S SKrS SK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\R&                  5      r " S S\R&                  5      r\S:X  a  S SKr\R.                  " \5        gg)    N)chord)Chord)	converter)key)m21ToXml)testPrimitive)note)pitch)scale)stream)tempo)tie)volumec                   $    \ rS rSrSrS rS rSrg)TestExternal   Tc                 ~    / SQ/ SQ4 H1  n[        U5      nU R                  (       d  M!  UR                  5         M3     g )N)g2c4zc#6)cd-zf#g)r   show)self	pitchListas      Q/home/james-whalen/.local/lib/python3.13/site-packages/music21/test/test_chord.py	testBasicTestExternal.testBasic   s0    -02Ii Ayyy	2    c           	      N   [         R                  " 5       n[        S5       H  n/ n[        [        R                  " / SQ5      5       HC  n[        R                  " [        [        S5      5      5      nXS;  d  M2  UR                  U5        ME     [        U5      nSUl        UR                  UR                  5        UR                  [        UR                  5      R                  SS5      5        UR                  U5        M     U R                  (       a  UR                  5         g g )N   )                     r$     )r   Streamrangerandomchoicelistappendr   quarterLengthaddLyric
forteClassstr	primeFormreplacer   )r   sichordRawjpcr   s          r   testPostTonalChords TestExternal.testPostTonalChords   s    MMOrAH6==);<=]]4b	?3%OOB' > hAAOJJq||$JJs1;;'//R89HHQK  99FFH r     N)__name__
__module____qualname____firstlineno__r   r   r=   __static_attributes__r?   r    r   r   r      s    D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g)Test/   c                 j    SnU H  nU[        U5      S-   -  nM     US[        U5      S-
   nUS-  nU$ )z;
make tests for old-style pitch representation still work.
[z, r      ])r5   len)r   listInoutps       r   pitchOutTest.pitchOut1   sG     A3q6D= C !CHqL!s

r    c                    [         R                  " / SQ5      n[        R                  " U5      n[        R
                  " S5      UR                  S   l        UR                  S   R                  R                  S5        U R                  [        U5      S5        U R                  [        U5      S5        [         R                  " SS/5      n[        R                  " U5      nU R                  X5        U R                  UR                  S   UR                  S   5        U R                  UR                  S   R                  UR                  S   R                  5        [        R                  " 5       nUR                  U5        [        R                  " U5      nU R                  X45        U R                  UR                  S   R                  S   UR                  S   R                  S   5        U R!                  UR                  S   R                  S   R                  UR                  S   R                  S   R                  L5        g )	N)C4E-4G4sharpr      z <music21.chord.Chord C#4 E#4 G4>z<music21.chord.Chord C4 E-4 G4>zC#3E4)r   r   copydeepcopyr
   
Accidentalpitches
accidentalsetassertEqualreprassertIsNotr   r,   r1   notes
assertTrue)r   c1c2stream1stream2s        r   testMoreCopiesTest.testMoreCopies<   s   [[,-]]2#(#3#3G#<

1 


1  $$Q'b#EFb#DE[[%']]2 A

16A112::a=3K3KL--/r--(*q)11!4gmmA6F6N6Nq6QRa(003>>a(003>>? 	@r    c           	      *&   [         R                  " 5       nSUl        SUl        [         R                  " 5       n[         R                  " 5       nU R	                  U[         R                  5        U R	                  U[         R                  5        [         R                  " 5       nSUl        SUl        [
        R                  " 5       nSUl        SUl        [        R                  " XU/5      nU R                  UR                  SUS9S5        UR                  U5        [         R                  " 5       nS	Ul        SUl        [        R                  " XAXW/5      nU R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  5       S
5        U R                  UR!                  5       S
5        U R                  UR                  5       S
5        U R                  UR!                  5       S5        [         R                  " 5       n	SU	l        SU	l        [        R                  " XAXY/5      n
U R                  U
R!                  5       S5        U R                  U
R#                  5       S5        [         R                  " 5       nSUl        SUl        [        R                  " XAX[/5      nU R                  UR#                  5       S
5        U R                  UR%                  5       S
5        [        R                  " XAXYU/5      nU R                  UR%                  5       S5        [        R                  " XIU/5      nU R                  UR'                  5       S
5        U R                  U
R'                  5       S5        [        R                  " XAU/5      nU R                  UR)                  5       S
5        U R                  UR)                  5       S5        U R                  UR)                  5       S5        [         R                  " 5       nSUl        SUl        [        R                  " XAU/5      nU R                  UR+                  5       S
5        U R                  UR+                  5       S5        [         R                  " 5       nSUl        SUl        [        R                  " XIUU/5      nU R                  UR-                  5       S
5        U R                  UR-                  5       S5        [         R                  " 5       nSUl        SUl        [        R                  " XAUU/5      nU R                  UR/                  5       S
5        U R                  UR/                  5       S5        [        R                  " U/5      nU R                  UR!                  5       S5        U R                  UR%                  5       S5        [         R                  " 5       nSUl        SUl        [        R                  " UUXY/5      nUR                  U5        U R                  UR!                  5       S5        U R                  UR+                  5       S5        [        R                  " XIUU/5      nU R                  UR                  S5      S 5        U R                  UR1                  S5      S
5        U R                  UR3                  5       S
5        U R5                  UR                  S5      S 5        U R                  UR                  5       S
5        U R                  UR!                  5       S5        [         R                  " 5       nSUl        SUl        [        R                  " XIU/5      nU R                  UR7                  5       S
5        U R                  UR7                  5       S5        [        R                  " XAUU/5      nU R                  UR9                  5       S
5        U R                  UR9                  5       S5        U R                  UR;                  5       R                  S5        U R                  UR=                  5       S5        U R                  UR?                  5       S5        [         R                  " 5       nSUl        SUl        [        R                  " UXA/5      nU R                  UR=                  5       S5        [        R                  " UXA/5      nUR                  U5        U R                  UR=                  5       S5        [         R                  " 5       n SU l        SU l        [        R                  " UU U/5      n!U R                  U!R=                  5       S5        U R                  U!R?                  5       S5        [         R                  " 5       n"SU"l        SU"l        [        R                  " XAU"/5      n#U R                  U#R                  5       R                  UR                  5        U R                  U#R=                  5       S5        U R                  U#R?                  5       S5        [        R                  " UU"/5      n$U$R                  U"5        [        R                  " XAU/5      n%U R                  U%R                  5       R                  S5        [         R                  " 5       n&SU&l        SU&l        [         R                  " 5       n'SU'l        SU'l        [        R                  " UU&U'/5      n(U R                  U(R                  5       R                  S5        U R                  U(R?                  5       S5        [        R                  " UU&U'U/5      n)U R                  U)R                  5       R                  S5        [         R                  " 5       n*SU*l        SU*l        [         R                  " 5       n+SU+l        SU+l        [        R                  " U/5      n,U R                  U,R                  5       R                  S5        [        R                  " UU+/5      n-U R                  U-R                  5       R                  S5        [         R                  " 5       n.SU.l        SU.l        [        R                  " XIU./5      n/U R                  U/R                  5       R                  S5        [        R                  " XIU.U/5      n0U R                  U0R                  5       R                  S5        [        R                  " U U"U.U*/5      n1U R                  U1R                  5       R                  S5        [         R                  " 5       n2SU2l        SU2l        [         R                  " 5       n3SU3l        SU3l        [         R                  " 5       nS	Ul        SUl        [        R                  " XIU.UU2/5      n4U R                  U4R                  5       R                  S5        [        R                  " XIU.UU2U3/5      n5U R                  U5R                  5       R                  S5        [        R                  " XIU.UU2U3U/5      n6U R                  U6R                  5       R                  UR                  5        [        R                  " XIU.U/5      n7U R                  U7R;                  5       R                  S5        U R                  U7R                  5       R                  S5        U R                  U7R?                  5       S5        [         R                  " 5       n8SU8l        [         R                  " 5       n9SU9l        [         R                  " 5       n:SU:l        [         R                  " 5       n;SU;l        [        R                  " XIU.U8U:UU;/5      n<U<R                  U5        U R                  U<R9                  5       S5        U R                  U<R/                  5       S5        U R                  U<RA                  5       S5        [        R                  " UU8U;U9/5      n=U R                  U=RA                  5       S
5        [        R                  " UU3UU:U/5      n>U>RC                  5       n?U R                  U?RD                  S   R                  S5        U R                  U?RD                  S   R                  S5        U R                  U?RD                  S   R                  S5        U R                  U?RD                  S   R                  S5        U R                  U?RD                  S   R                  S	5        U>RG                  5       n@U R                  U@RD                  S   R                  S5        U R                  U@RD                  S   R                  S5        U R                  U@RD                  S   R                  S5        U R                  U@RD                  S   R                  S5        U R                  U@RD                  S   R                  S	5        U>RI                  5       nAU R                  UARD                  S   R                  S5        U R                  UARD                  S   R                  S5        U R                  UARD                  S   R                  S5        U R                  UARD                  S   R                  S5        U R                  UARD                  S   R                  S	5        g )NE-r%   Cr$   Gr#   )testRootFzA-TEBzG-zB-zB--zC#rJ   zG#+   r   rW   r&   *   FADr'   zF--zA#F#)%r	   NotenameoctaveassertIsInstancer
   Pitchr   r   ra   getChordSteprootthirdfifthr_   containsTriadisTriadcontainsSeventh	isSeventhisMajorTriadisMinorTriadisDiminishedTriadisDominantSeventhisDiminishedSeventhhasRepeatedChordStephasAnyRepeatedDiatonicNoteassertIsisAugmentedTriadisHalfDiminishedSeventhbass	inversioninversionNameisFalseDiminishedSeventhsortAscendingr\   sortChromaticAscendingsortFrequencyAscending)Br   	highEFlatr   bmiddleClowGchord1	highAFlatchord2middleEchord3middleBchord4chord5chord6chord7lowGFlatchord8middleBFlatchord9middleBDoubleFlatchord10chord11middleCSharpchord12chord13	lowGSharpchord14chord15lowCchord16chord17lowEchord18lowBFlatchord19chord20chord21middleFlowAchord22chord23highChighEchord24chord25middleGchord26chord27chord28highDhighFchord29chord30chord31chord32middleFDblFlatmiddleAmiddleASharpmiddleFSharpchord33chord34scrambledChord1unscrambledChord1unscrambledChord2unscrambledChord3sB                                                                     r   testConstructionTest.testConstructionR   s   IIK			IIKIIKa+a+))+{{}	i$78,,Q,A5IGIIK			g$BCt,t,--/6)40--/6)51))+g$@A)51//159))+g$@A//148))+T2g$IJ))+U3g56,,.5,,.6g$78,,.5,,.6,,.699;g(;<113T:113U;iikgkBC113T:113U; IIK!&#$ ++w8=NOP 	446=335u=++wi(*E2**,e4yy{ ++wdDEW*E2224e<++wx@A--a0$755a8$?;;=tDg**1-t4..0$7*E2IIK			++w;<113T:002E:++w8[IJ88:DA88:EB,,d3**,a0..0"5yy{	++tW89**,a0++tW89W**,a0yy{	++wh78**,a0..0!499;++w8<=,,gll;**,a0..0"5 ++tX./X++w8<=,,c2))+yy{	++w67,,c2..0!4++wyAB,,c2		
		
++wi(,,c2++w./,,c2))+++w9:,,c2++w+FG,,c2++tXw>?,,c2		
		
IIK			++w+uMN,,c2++w+ueTU,,c2++w+ueU^_` 	,,gll;++w'BC,,c2,,c2..0!4#))+yy{ yy{ ++w.+->N OW88:EB446>99;UC++wgNO99;TB++y%,Pa&bc+99;*2215::C@*2215::DA*2215::EB*2215::C@*2215::DA+BBD*2215::C@*2215::EB*2215::DA*2215::C@*2215::DA+BBD*2215::C@*2215::EB*2215::DA*2215::C@*2215::DAr    c                    [         R                  " S5      nU R                  UR                  R                  S5        [
        R                  " / SQ5      nU R                  UR                   Vs/ s H  o3R                  PM     sn/ SQ5        U R                  UR                   Vs/ s H  o3R                  PM     sn/ SQ5        g s  snf s  snf )N?   rk   );   r   B   )rp   zD#rv   )TTT)	r	   rw   r_   r
   rx   r   r   r\   spellingIsInferred)r   eFlatbMajorrO   s       r   testEnharmonicSimplification!Test.testEnharmonicSimplificationm  s    		"))40\*&..9.Q&&.9;LMG1..GI[\ :Gs   .C&Cc                    [         R                  " S5      nSUR                  l        [        R
                  " U/5      nU R                  UR                  R                  S5        [         R                  " S5      nSUR                  l        [        R
                  " X/5      nU R                  UR                  R                  S5        [        R
                  " X1/5      nU R                  UR                  R                  S5        [        R
                  " X/SS9nU R                  UR                  R                  S5        g )NrS   quarterD4halfwhole)type)r	   rw   durationr   r   r   r_   )r   Cqchord35Dhchord36chord37chord38s          r   testDurationsTest.testDurationst  s    YYt_$++rd#))..	:YYt_!++rh'))..	:++rh'))..7++rhW5))..8r    c                     [        / SQ5      nU R                  UR                  5       5        U R                  UR	                  5       5        [        S/5      nU R                  UR	                  5       5        g )N)C#4rX   rU   rS   )r   rc   r   assertFalser   r   r   r   s      r   testShortCutsTest.testShortCuts  s[    *+0023,,./v,,./r    c                     [         R                  " / SQ5      nUR                  5       nU R                  [	        U5      S5        g )N)r   G5E6z<music21.chord.Chord C#4 E4 G4>)r   r   closedPositionr_   r`   r   s      r   testClosedPositionTest.testClosedPosition  s4    01&&(f'HIr    c                 $   [        / SQ5      nU R                  UR                  / SQ5        U R                  UR                  S5        U R                  UR                  / SQ5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  / SQ5        U R                  UR                  S5        U R                  UR                  / SQ5        U R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  [        / S	Q5      5      5        U R                  UR                   S
5        g )N)r   rW   r#   r&   r(   	   r)   )r   rW   r#   r&   r(   r   r   r'   )r   rW   r#   r&   r(   r   r&   z6-29   )rJ   rJ   r$   rJ   r#   rJ   )r   rW   r$   r&   r'   r   zcombinatorial RI (RI9))r   r_   pitchClassesmultisetCardinalityorderedPitchClassespitchClassCardinalityr4   normalOrderforteClassNumberr6   intervalVectorr   isPrimeFormInversionrc   hasZRelationareZRelations
commonNamer   rd   s     r   testPostTonalChordsATest.testPostTonalChordsA  s&   )**?@//3//1CD1115/);<,,b1'9:**,>?001(((/A)BCD(@Ar    c                     [        / SQ5      nU R                  UR                  S5        U R                  UR                  S5        g )N)rW   r$   r'   
   zdiminished seventh chordzA#-diminished seventh chord)r   r_   r  pitchedCommonNamer	  s     r   testPostTonalChordsBTest.testPostTonalChordsB  s8    =!(BC--/LMr    c                    [         R                  " / SQ5      n[        R                  " 5       nUR	                  [
        R                  " S5      5        UR	                  U5        U R                  [        UR                  5      S5        [        R                  " 5       nUR	                  [
        R                  " S5      5        UR	                  U5        UR                  nU R                  [        U5      S5        [        R                  " 5       nUR	                  [
        R                  " S5      5        [         R                  " / SQ5      nUR	                  U5        UR                  nU R                  [        U5      S5        g )	NC#5zE#5zG#5c#=[(1, None), (3, <music21.pitch.Accidental sharp>), (5, None)]r   |[(1, <music21.pitch.Accidental sharp>), (3, <music21.pitch.Accidental double-sharp>), (5, <music21.pitch.Accidental sharp>)]rl   )rS   r   r   rT   rX   F4zy[(1, None), (1, <music21.pitch.Accidental sharp>), (2, None), (3, <music21.pitch.Accidental flat>), (3, None), (4, None)])
r   r   r   r,   r1   r   Keyr_   r`   scaleDegrees)r   r   st1st2sd2st3r   sd3s           r   testScaleDegreesATest.testScaleDegreesA  s   23mmo

3774=!

6f112X	Z mmo

3773< 

6!!cD	E
 mmo

3773< CD

6!!cY	Zr    c                    [        / SQ5      n[        R                  " 5       nUR                  [        R
                  " S5      5        UR                  U5        U R                  UR                  U5        U R                  [        UR                  5      S5        [        R                  " 5       nUR                  [        R
                  " S5      5        UR                  U5        U R                  UR                  U5        U R                  UR                  U5        U R                  [        UR                  5      S5        g )Nr  r  r  r   r  )r   r   r,   r1   r   r  r_   
activeSiter5   r  assertNotEqual)r   r   r  r  s       r   testScaleDegreesBTest.testScaleDegreesB  s    ,-mmo

3774=!

6**C0V001X	Z mmo

3773< 

6F--s3 	**C0 	##$e	
r    c                    [         R                  " / SQ5      nU R                  UR                  S 5        [        R                  " 5       n[        R                  " 5       nX!R
                  S   l        U R                  UR                  U5        X1l        U R                  [        UR                  5      [        U5      5        U R                  [        UR
                  S   R                  5      [        U5      5        U R                  [        UR
                  S   R                  5      [        U5      5        U R                  [        UR
                  S   R                  5      [        U5      5        [        R                  " 5       n[        R                  " 5       n[        R                  " 5       nUR                  XAR                  S   5        UR                  XQR                  S   5        UR                  XaR                  S   5        U R                  [        UR                  UR                  S   5      5      [        U5      5        U R                  [        UR                  UR                  S   5      5      [        U5      5        U R                  [        UR                  UR                  S   5      5      [        U5      5        [        R                  " [        R                  5      nUR                  5       R                  [         R                  5      nU R                  US   R                  [         R"                  " S5      5      R$                  S5        U R                  US   R                  [         R"                  " S5      5      S 5        U R                  US   R                  [         R"                  " S5      5      S 5        U R                  US   R                  [         R"                  " S5      5      R$                  S	5        U R                  US   R                  [         R"                  " S
5      5      S 5        U R                  US   R                  [         R"                  " S5      5      R$                  S	5        U R                  US   R                  [         R"                  " S5      5      R$                  S5        U R                  US   R                  [         R"                  " S5      5      S 5        [&        R(                  " 5       n	U	R                  U5      R+                  S5      n
U
R-                  SS5      n
U
R-                  SS5      n
U R/                  U
R1                  S5      S:g  U
5        g )N)r   dr   r   rW   rJ   a4startc5f4continueg5zutf-8r*   r+   
z<pitch><step>A</step><octave>4</octave></pitch><duration>15120</duration><tietype="start"/><type>quarter</type><dot/><stem>up</stem><notations><tiedtype="start"/></notations>)r   r   r_   r   Tie_notesidsetTier\   getTier   parser   chordIndependentTiesflattengetElementsByClassr
   r{   r   r   GeneralObjectExporterdecoder7   rc   find)r   rd   t1t2t3t4t5r8   chordsGEXrN   s              r   	testTiesATest.testTiesA  s   [[) 	&WWYWWY		!$BFFRV,BIIaL,,-r"v6BIIaL,,-r"v6BIIaL,,-r"v6 WWYWWYWWY
		"jjm$
		"jjm$
		"jjm$BIIbjjm45r"v>BIIbjjm45r"v>BIIbjjm45r"v>OOM>>?//<))%++d*;<AA7K))%++d*;<dC))%++d*;<dC))%++d*;<AA:N))%++d*;<dC))%++d*;<AA:N))%++d*;<AA7K))%++d*;<dC ,,.iil!!'*kk#r"kk$# "P Q UWW 		r    c                 f   [         R                  " 5       n[        R                  " 5       n[	        S5       Hx  n[        [	        US-   5      5      nUR                  SSSS9nU H6  nUR                  [        R                  " S5      UR                  U   5        M8     UR                  U5        Mz     g )Nr'   rW   r   r*  )r2   r)  )r   WholeToneScaler   r,   r-   r0   getChordr3  r   r0  r\   r1   )r   scr8   r9   tiePosr   poss          r   	testTiesBTest.testTiesB  s    !!#MMOqA%A,'FD$a8A)199S>: HHQK r    c                    [        SS/5      nUR                  S   nUR                  SU5        U R                  UR                  S   R
                  5        U R                  UR                  S   R
                  R                  S5        g )Nr   rW   r)  r   )r   r\   r3  assertIsNoner1  r   r_   r   )r   re   secondD4s      r   	testTiesCTest.testTiesC&  sk    D$< ::a=
		'8$"))A,**+1))..8r    c                 V    [        SS/5      nU R                  UR                  S5        g )Nr   ze-minor)r   r_   qualityr	  s     r   testChordQualityTest.testChordQuality-  s$    C;W-r    c                 >   [        SS/5      nUR                  [        R                  " SS9[        R                  " SS9/5        U R	                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5        g )Nzg#r   `   velocity)
r   
setVolumesr   Volumerc   hasComponentVolumesr   hasVolumeInformationrN  _volume)r   r   s     r   testVolumeInformationTest.testVolumeInformation1  sq    4,	fmmR0&--2LMN--/0//12!))$r    c                 6   [        / SQ5      n[        R                  " SS9n[        R                  " SS9n[        R                  " SS9nUR                  US5        UR                  US5        UR                  US5        U R	                  UR                  S5      R                  S5        U R	                  UR                  S5      R                  S5        U R	                  UR                  S5      R                  S5        U R	                  UR                  S5      R                  U5        U R	                  UR                  S5      R                  U5        U R	                  UR                  S5      R                  U5        [        R                  " U5      nU R	                  UR                  S5      R                  S5        U R	                  UR                  S5      R                  S5        U R	                  UR                  S5      R                  S5        U R	                  UR                  S5      R                  U5        U R	                  UR                  S5      R                  U5        U R	                  UR                  S5      R                  U5        g )	Nr   d-4g4o   rY  b   I   r   rd  re  )
r   r   r\  	setVolumer_   	getVolumerZ  clientrY   rZ   )r   r   v1v2v3cCopys         r   testVolumePerPitchATest.testVolumePerPitchA9  s   %&]]C(]]B']]B'	B	B	BT*33S9U+44b9T*33R8T*1115U+22A6T*1115a .77=/88"=.77< 	.55u=/66>.55u=r    c                 ~   [         R                  " 5       n/ SQn[        S5       HH  n[        / SQ5      n[	        U5       H  u  pVX%   UR
                  l        M     UR                  U5        MJ     / nU H1  nU H(  nUR                  UR
                  R                  5        M*     M3     U R                  U/ SQ5        g )N)皙?      ?rW   r)   )c3rd  r-  )$   @      rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  rv  rw  rx  )
r   r,   r-   r   	enumerater   velocityScalarr1   rZ  r_   )r   r8   ampsr;   r   r9   submatchs           r   testVolumePerPitchBTest.testVolumePerPitchBV  s    MMOrA)*A#A,,0G

) 'HHQK	 
 ASZZ001   	 !M 	Nr    c           
      \   [        / SQ5      nSUR                  l        [        R                  " 5       nUR                  [        R                  " SSS95        / SQnS H  n[        R                  " U5      nUb0  XER                  l        U R                  UR                  5       5        Oi[        R                  " U5        UR!                  U Vs/ s H  n[        R"                  " US9PM     sn5        U R%                  UR                  5       5        UR'                  U5        M     g s  snf )	N)zf-2za-2zc-3f-3g3b-3rd  ze-4rt  rJ   2   )referentnumber)rs  g?g333333?g?rt  g333333?gffffff?g?)Xrt  rt  rt  rt  rt  rt  rt  rt  rt  rW   rt  rW   rt  rt  rt  rt  rt  rW   rt  rt  rW   rt  rt  rt  rW   rt  rt  rt  rt  rW   rt  rt  NNNNNNNNNNNNNNNNrt  rt  rt  rt  rt  rW   rt  rW   rt  rt  rt  rt  rt  rW   rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  rt  )rz  )r   r   r2   r   r,   insertr   MetronomeMarkrY   rZ   r   rz  r   r]  r.   shuffler[  r\  rc   r1   )r   r   r8   r{  accentcNewxs          r   testVolumePerPitchCTest.testVolumePerPitchCf  s    IJ#&

 MMO	$$a;<7F ==#D!-3*  !9!9!;<t$$ O$Qa!@$ OP 8 8 :;HHTN)$ !Ps   D)
c           	      <   [        / SQ5      nSUR                  l        U R                  UR                  R                  S5        U R	                  UR                  5       5        UR                  S Vs/ s H  n[        R                  " US9PM     sn5        U R                  U Vs/ s H  o"R                  R                  PM     sn/ SQ5        U R                  UR                  5       5        U R                  UR                  R                  S5        U R                  UR                  5       5        U R                  U Vs/ s H  o"R                  R                  PM     sn/ SQ5        SUR                  l        U R                  UR                  R                  S5        U R                  UR                  5       5        U R                  U Vs/ s H  o"R                  R                  PM     sn/ SQ5        [        R                  " SS9Ul        U R                  UR                  R                  S5        U R	                  UR                  5       5        UR                  S Vs/ s H  n[        R                  " US9PM     sn5        U R                  U Vs/ s H  o"R                  R                  PM     sn/ SQ5        U R                  UR                  5       5        U R                  UR                  S 5        g s  snf s  snf s  snf s  snf s  snf s  snf )	N)r  r  r  y   )r"   <   Z   rY  r  rx  r   )r  r   r"   )
r   r   rZ  r_   r   r]  r[  r\  rc   r_  )r   r   r  s      r   testVolumePerPitchDTest.testVolumePerPitchD  s5   &'**C0..01	FAfmmQ/FGQ7Q((++Q7F--/0**B/--/0Q7Q((++Q7F  **C0--/0Q7Q((++Q7F=="-**B/..01	FAfmmQ/FGQ7Q((++Q7F--/0D)1 G7 8 8 G7s$   3L 'LL
L'LLc                    [        / SQ5      nU R                  [        US   R                  5      S5        U R                  [        US   R                  5      S5        U R                  [        US   R                  5      S5        U R                  [        US   5      S5        U R                  [        US	   5      S5        U R                  [        US
   5      S5        U R                  [        US   5      S5        U R                  [        US   5      S5        U R                  [        US   5      S5        SUS   l        SUS   l        SUS   l        U R                  US   R                  S5        U R                  US   R                  S5        U R                  US   R                  S5        U R                  U Vs/ s H  o"R
                  R                  PM     sn/ SQ5        [        R                  " U5      nU R                  U Vs/ s H  o"R
                  R                  PM     sn/ SQ5        / SQn[        U5       H  u  pRXE   UR
                  l        M     U R                  U Vs/ s H  o"R
                  R                  PM     sn/ SQ5        U R                  U Vs/ s H  o"R
                  R                  PM     sn/ SQ5        U R                  U Vs/ s H  o"R
                  R                  PM     snX3U/5        U R                  U Vs/ s H  o"R
                  R                  PM     snXU/5        g s  snf s  snf s  snf s  snf s  snf s  snf )Nrc  r   rS   rW   zD-4rJ   rU   z0.pitchz1.pitchz2.pitchz0.volumez%<music21.volume.Volume realized=0.71>z1.volumer   P   x   z2.volume)r   r  r  )      !   )
r   r_   r5   r
   rZ  r   rY   rZ   ry  rk  )r   r   r  ro  
velocitiesr9   s         r   testGetItemATest.testGetItemA  s   %&QqTZZ$/QqTZZ%0QqTZZ$/Qy\*D1Qy\*E2Qy\*D1 	Qz]+-TUQz]+-TUQz]+-TU!#*!#*!$*://4://4://5Q7Q((++Q7Ga U;U((++U;]K!
e$DA *AHH %U;U((++U;\JQ7Q((++Q7G595a((//59E%;PQ151a((//15ayA 8; <795s$   MM5M-M%MM c                 H   [        / SQ5      n[        R                  " 5       nU H  nUR                  U5        M     U R	                  [        UR                  5      S5        U R	                  UR                  S5        U R	                  [        UR                  5      S5        g )N)d2ze-1zb-6r#   g       @zP[<music21.pitch.Pitch D2>, <music21.pitch.Pitch E-1>, <music21.pitch.Pitch B-6>])
r   r   r,   r1   r_   rL   rb   highestOffsetr5   r\   )r   r   r8   ns       r   testChordComponentsATest.testChordComponentsA  sv    &'MMOAHHQK QWWq)#.		N^	`r    c                     [         R                  " / SQ5      nU R                  UR                  5       S5        UR                  S5        U R                  [	        U5      S5        g )N)re  b4d5f5r   rW   z!<music21.chord.Chord B4 D5 F5 G5>)r   r   r_   r   r`   )r   r   s     r   testInvertingSimpleTest.testInvertingSimple  sG    KK01*	Aa"EFr    c                 h    [        S5      n[        R                  " U5      nU R                  X5        g )NC4 E4 G4)r   rY   rZ   r_   )r   chch2s      r   testDeepcopyChordTest.testDeepcopyChord  s(    :mmB!r    c                     [        S5      nUR                  5       nUR                  5         UR                  U5        U R	                  UR                  5       R
                  S5        g)z:
Test that bass and root caches invalidate after removal.
r  ro   N)r   r}   r   remover_   rx   )r   r  rs      r   testNewBassAfterRemoveTest.testNewBassAfterRemove  sG     :GGI
	
		!-r    c                     SnU R                  [        U5         [        [        R                  " 5       /5        S S S 5        g ! , (       d  f       g = f)NzQUse a PercussionChord to contain Unpitched objects; got \[<music21.note.Unpitched)assertRaisesRegex	TypeErrorr   r	   	Unpitched)r   msgs     r   testChordCannotContainUnpitched$Test.testChordCannotContainUnpitched  s5    b##Is34>>#$% 433s    A
Ac                     [         R                  " S5      nU R                  UR                  5       5        UR	                  SSS9  U R                  UR                  5       5        g )Nr  r  F)runSort)r   r   rc   isConsonantaddr   )r   r  s     r   testCacheClearedOnAddTest.testCacheClearedOnAdd  sH    [[$()
ue$)*r    r?   N) r@   rA   rB   rC   rP   rh   r   r   r   r   r   r
  r  r  r$  rC  rK  rP  rU  r`  rp  r~  r  r  r  r  r  r  r  r  r  rD   r?   r    r   rF   rF   /   s    	@,YBv]9&0J
B N
Z4
:9v9.%>:N 8*BB<	`G"
.&+r    rF   __main__)rY   r.   unittestmusic21r   music21.chordr   r   r   music21.musicxmlr   r   r	   r
   r   r   r   r   r   TestCaser   rF   r@   mainTestr?   r    r   <module>r     s|           % *       8$$ 6@+8 @+F zT r    