
    rh]                       S SK Jr  S SKJr  S SKJ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Jr  S SKJr   " S S\R(                  5      r\S:X  a  S SKr\R.                  " \5        gg)    )annotations)pformat)dedentN)common)corpus)
instrument)meter)note)pitch)scale)intervalNetwork)Terminus	Direction)streamc                      \ 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$ )N[z, r      ])strlen)selflistInoutps       W/home/james-whalen/.local/lib/python3.13/site-packages/music21/scale/test_scale_main.pypitchOutTest.pitchOut    sE    A3q6D= C !CHqL!s

    c                   [         R                  " 5       n[        R                  " U5      nU R	                  UR
                  S5        U R	                  UR                  5       S   R                  S5        UR                  S5      nU R	                  UR                  S5        UR                  5       nU R	                  UR                  S5        [         R                  " 5       nSUl        UR                  5       nU R	                  UR
                  SSUR
                  -   5        UR                  5        Vs/ s H  owR
                  PM     nnU R	                  U/ S	Q5        [         R                  " 5       n	S
U	l        SU	l        [        R                  " U	5      n
U R	                  U
R
                  SSU
R
                  -   5        U
R                  5        Vs/ s H  owR
                  PM     nnU R	                  U/ SQ5        U R	                  U
R                  5       S   U	R                  5        U R	                  U
R                  5       S   R                  S5        U
R                  S5      nU R	                  UR
                  S5        U
R                  5       nU R	                  UR
                  S5        U
R                  5       nU R	                  UR
                  S5        U
R                  5       nU R	                  UR
                  S5        U R	                  UR!                  5       R
                  S5        U R	                  UR                  5       R
                  S5        g s  snf s  snf )NzC major   B   GAzA minorzGot a different name: )r'   r$   CDEFr&   r'   B-   zB- minor)r,   r(   D-zE-r+   zG-A-r,   r   r   r(   r+   zB- majorzD- majorr.   r/   )r
   Noter   
MajorScaleassertEqualname
getPitchessteppitchFromDegreegetDominantgetRelativeMinoroctave
MinorScaler   getParallelMajorgetRelativeMajorgetTonic)r   n1cMajorseventhdomn2aMinornote1notesn3
bFlatMinornotes2cNotefNote
bFlatMajor
dFlatMajors                   r   testBasicLegacyTest.testBasicLegacy(   s   YY[!!"%i0**,Q/44c:((+s+  "3'YY[((*i1IFKK1WX)/):):)<=)<)<= HIYY[	%%b)
*6NQ[Q`Q`6`a*4*?*?*AB*A***AB!OP..03RXX>..03::A>, **1-S)&&(S)002
*5  002
*5,,.33T://166=_ > Cs   6M!M&c           
        [         R                  " 5       nU R                  U R                  UR	                  SS5      5      S5        UR                  S5      nU R                  U R                  UR	                  SS5      5      S5        U R                  [        UR                  S5      5      S5        U R                  [        UR                  S5      5      S	5        U R                  U R                  UR                  / S
Q5      5      S5        U R                  U R                  UR                  SS/SSS95      S5        [         R                  " S5      nU R                  UR                  S5      S5        U R                  UR                  S5      S 5        U R                  UR                  SSS9S5        U R                  UR                  SSS9S5        [         R                  " S5      nU R                  [        UR                  S5      5      S5        U R                  [        UR                  S5      5      S5        [         R                  " 5       n[        R                  " S5      nUR                  UR                  S   5      nU R                  [        U5      S5        UR                  UR                  S    5      nU R                  [        U5      S5        UR                  UR                  S!   5      nU R                  [        U5      S"5        [         R"                  " 5       nS#n[         R                  " S$5      n[$        R&                  S4[$        R(                  S4[$        R&                  S4[$        R(                  S4[$        R&                  S4[$        R(                  S4[$        R&                  S44 HK  u  pS% H@  n
UR+                  XhU	S&9n[,        R.                  " U5      nXl        UR3                  U5        MB     MM     U R                  U R                  UR4                  5      S'5        [         R6                  " 5       n[         R6                  " 5       nS(nS)n[         R8                  " S5      n[$        R&                  S4[$        R(                  S4[$        R&                  S4[$        R(                  S4[$        R&                  S44 H  u  pS* H@  n
UR+                  XU	S&9n[,        R.                  " U5      nXl        UR3                  U5        MB     U[$        R&                  :X  a  [$        R(                  nO$U[$        R(                  :X  a  [$        R&                  nS* H@  n
UR+                  XU	S&9n[,        R.                  " U5      nXl        UR3                  U5        MB     M     [         R:                  " 5       nUR=                  S+U5        UR=                  S+U5        [         R                  " S,5      n[         R                  " S-5      n[         R                  " S.5      nU R?                  XA5        U R                  UR@                  UR@                  5        U R?                  XB5        U R?                  UR@                  UR@                  5        U R                  [C        URE                  U5      5      S/[C        URE                  U5      5      5        g )0Nc2c5za[C2, D2, E-2, F2, G2, A-2, B-2, C3, D3, E-3, F3, G3, A-3, B-3, C4, D4, E-4, F4, G4, A-4, B-4, C5]z-m3zX[C2, D2, E2, F2, G2, A2, B2, C3, D3, E3, F3, G3, A3, B3, C4, D4, E4, F4, G4, A4, B4, C5]   C4r%   G4)   r-   r#   z[A3, E4, F4, A4]r   c6c9)minPitchmaxPitchz[C6, B6, C7, B7, C8, B8, C9]r/   za-rU   zg#
pitchClasscomparisonAttributeze-r3   r-   c4G3   bwv66.6z#soprano"<music21.scale.MajorScale A major>z#tenorz#bassz#<music21.scale.MinorScale F# minor>zd#4E4)rU         ?rc         ?rd   rd   rd   	directionstepSizez[E4, F#4, G#4, A4, B4, C#5, D#5, B4, G#4, E4, C#4, A3, F#3, D#3, G#3, C#4, F#4, B4, E5, A5, D#6, G#5, C#5, F#4, B3, E3, A2, D#2, G#2, C#3, F#3, B3, E4, A4, D#5, B4, G#4, E4, C#4, A3, F#3, D#3, E3, F#3, G#3, A3, B3, C#4, D#4]b4b3)rU   rc   rd   rd   r   gazf#a  {'matched': [<music21.pitch.Pitch A4>,
             <music21.pitch.Pitch B4>,
             <music21.pitch.Pitch D5>,
             <music21.pitch.Pitch E5>,
             <music21.pitch.Pitch F#5>],
 'notMatched': [<music21.pitch.Pitch C#5>, <music21.pitch.Pitch G#5>]})#r   r:   r2   r   r4   	transposer   r6   pitchesFromScaleDegreesr1   getScaleDegreeFromPitchHypophrygianScaler   parsederivepartsr   Streamr   	ASCENDING
DESCENDING	nextPitchr
   r0   quarterLengthappendpitchesPartOctatonicScaleScoreinsertassertNotEqualabstractr   match)r   sc2sc3sc4sc1sr   scdxyns1s2p1p2s                   r   	testBasicTest.testBasicm   s      	s~~dD'AB@	A
 mmE"s~~dD'AB=	>
 	S0034d;S0034d;s'B'B9'MN+	-MM++F!! ,  +	, t$44T:A>44T:DA44TIU 5 WXY	[44TIO 5 QRS	U
 %%d+S0034d;S0034d;  LL#jj,-S#GHjj*+S#GHjj)*S#HI MMOd#))1-	0D0Da/H9K^K^`aJb**A.1D1Da0H9K_K_abJc))1-/DA ;LL!L<IIaL"#	 ;	/ 	qyy14	5 [[][[]!!$'))1-	0D0Da/H9K^K^`aJb**A.1D1Da0HJDA)\\"A\>IIbM"#		!	 *
 I'''((i***'')\\"A\>IIbM"#		!	 *J  LLN	B	B s#s#t$C%s||4C%CLL#,,730 3J
 LSSVS\S\]`SaKb	dr!   c           	        [         R                  " SSS/5      nU R                  U R                  UR	                  SS5      5      S5        U R                  UR
                  R                  5       S5        U R                  [        UR                  S5      5      S5        U R                  [        UR                  SS	S
5      5      S5        [         R                  " SS/5      nU R                  U R                  UR                  5      S5        U R                  U R                  UR	                  SS5      5      S5        U R                  UR                  S5      S5        U R                  UR                  S[        R                  S9S5        [         R                  " 5       nU R                  U R                  UR	                  5       5      S5        g )Nr]   m2g4g6zr[G4, A-4, A4, B-4, C-5, C5, D-5, D5, E-5, F-5, F5, G-5, G5, A-5, A5, B-5, C-6, C6, D-6, D6, E-6, F-6, F6, G-6, G6]r   rU   rS   rP   c3zB#1P5z[C4, G4]g2z[B-2, F3, C4, G4, D5, A5, E6]zb-2rf   z	[C4, D-4])r   CyclicalScaler2   r   r4   r   getDegreeMaxUniquer   r6   ry   rn   r   rt   )r   r   r   s      r   testCyclicalScalesTest.testCyclicalScales   s     d|4 	r}}T4'@AX	Y 	7791=R//23T:R//4>?G   v.rzz2J? 	r}}T4'@ACbc 	33D91=33E>G>Q>Q 4 STU	W !!#s~~'78+Fr!   c                Z   [         R                  " 5       nU R                  [        UR	                  SS5      5      S5        [         R
                  " 5       nU R                  [        UR	                  SS5      5      S5        U R                  [        UR	                  SS5      5      S5        g )Nr%   G#ra   z3<music21.scale.HarmonicMinorScale A harmonic minor>r   r*   z3<music21.scale.HarmonicMinorScale D harmonic minor>)r   r1   r2   r   deriveByDegreeHarmonicMinorScale)r   r   s     r   testDeriveByDegreeTest.testDeriveByDegree  s     S//489=	? &&(S//489N	PS//378N	Pr!   c           
     0   [         R                  " S5      nU R                  U R                  UR                  5      S5        U R                  U R                  UR                  [        R                  S95      S5        U R                  U R                  UR                  SS[        R                  S95      S5        U R                  U R                  UR                  SS[        R                  S95      S5        U R                  U R                  UR                  SS[        R                  S95      S5        U R                  U R                  UR                  SS	[        R                  S95      S
5        U R                  U R                  UR                  SS	[        R                  S95      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  S[        R                  S9S 5        U R                  UR                  S[        R                  S9S5        U R                  U R                  UR                  SS[        R                  S95      S5        U R                  UR                  S[        R                  S9S5        U R                  UR                  S[        R                  S9S5        U R                  UR                  S[        R                  S9S5        U R                  UR                  S[        R                  S9S5        U R                  UR                  S[        R                  5      R                  S5        U R                  UR                  S[        R                  5      R                  S5        U R                  UR                  S[        R                  5      R                  S5        g )Nrk   "[A4, B4, C5, D5, E5, F#5, G#5, A5]r   c1r   z<[C3, B2, A2, G2, F2, E2, D2, C2, B1, A1, G1, F1, E1, D1, C1]z@[C1, D1, E1, F#1, G#1, A1, B1, C2, D2, E2, F#2, G#2, A2, B2, C3]a5a6z"[A5, B5, C6, D6, E6, F#6, G#6, A6]z [A6, G6, F6, E6, D6, C6, B5, A5]a3rU   ri   r   zg#3r%   g3a4z*[A4, B4, C5, D5, E5, F#5, F5, G#5, G5, A5]g8zg#1f8r#   f#1e5F#5D5g#2A2)r   MelodicMinorScaler2   r   ry   r4   r   rt   ru   rn   BIrv   nameWithOctave)r   mms     r   testMelodicMinorATest.testMelodicMinorA)  sH   $$S)rzz24XYr}}y?R?R}'ST=	? 	r}}T49K_K_}'`aW	Y 	r}}T49K^K^}'_`[	] 	r}}T49K_K_}'`aW	Y 	r}}T49K^K^}'_`=	? 	r}}T49K_K_}'`a;	= 	33D91=33D91= 	33E:A> 	33EYEYEY3Z\`a 	33DIDXDX3Y[\]
 	r}}T49<<}'XYE	G
 	33DILL3QSTU33EY\\3RTUV33DILL3QSTU33EY\\3RTUVdI,?,?@OOQVW 	dI,@,@APPRVWeY-@-@APPRVWr!   c           
     r	   [         R                  " S5      nU R                  UR                  S[        R
                  S9R                  S5        U R                  UR                  S[        R
                  S9R                  S5        U R                  UR                  S[        R
                  S9R                  S5        U R                  UR                  S[        R                  S9R                  S	5        U R                  U R                  UR                  S
S
[        R                  S95      S5        U R                  U R                  UR                  S
S
[        R
                  S95      S5        U R                  [        UR                  S[        R
                  5      5      S5        U R                  [        UR                  S[        R
                  5      5      S5        U R                  [        UR                  S[        R
                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S	5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S	5        U R                  [        UR                  S[        R                  [        R                  S95      S5        U R                  [        UR                  S[        R
                  5      5      S5        U R                  [        UR                  S[        R
                  [        R                  S95      S5        [        R                  " 5       nSn[         R                  " S5      n[        S5       H{  nUS-  S:X  a  [        R
                  n/ SQnO[        R                  n/ SQnU H@  nUR                  X6SS9n[        R                   " U5      n	Xl        UR%                  U	5        MB     M}     UR'                  SS9  U R                  U R                  UR(                  5      S5        g
) zM
Need to test descending form of getting pitches with no defined min and max
rk   r   r   B4r-   E5r#   r   F5Nz [A5, G5, F5, E5, D5, C5, B4, A4]r   r   B3zf#5zG#5A5f5G5getNeighborzf#3r      r   )rU   rc   rc   r   rd   rd   rd   rd   )rU   rc   rU   rc   rc   rU   re   T)inPlacez[G3, A3, B-3, C4, D4, E4, F#4, G4, F4, E-4, D4, C4, B-3, C4, D4, E4, F#4, G4, A4, B-4, C5, B-4, A4, G4, F4, E-4, E4, F#4, G4, A4, B-4, C5, D5, E5, E-5, D5, C5, B-4, A4, B-4, C5, D5, E5, F#5, G5, A5, B-5, A5, G5, F5, E-5, D5])r   r   r2   r6   r   rt   r   ru   r   r4   r   rv   r   rs   ranger
   r0   rw   rx   makeAccidentalsry   )
r   r   r   r   r   rf   r   qlsr   r   s
             r   testMelodicMinorBTest.testMelodicMinorBe  s    $$S) 	++A9L9L+M\\^bc++A9L9L+M\\^bc++A9L9L+M\\^cd++A9M9M+N]]_cd 	r}}T49K_K_}'`a;	= 	r}}T49K^K^}'_`=	? 	R\\$	0C0CDEtLR\\%1D1DEFNR\\%1D1DEFMR\\$	0D0DEFMR\\$	0D0DEFMR\\$	0D0DEFMR\\%1E1EFGNR\\%1E1E6?6J6J * L MNR	T 	R\\$	0C0CDEuMR\\$	0C0C6?6J6J * L MNS	U MMO$$T*qI1}!''>((+LL!L<IIaL"#	  " 	
$'MM!))$^	_r!   c                    [         R                  " S5      nU R                  U R                  UR                  5      S5        U R                  [        UR                  S5      5      S5        g )Nr]   z$[G3, A-3, B-3, C4, D-4, E-4, F4, G4]rU   r^   )r   ro   r2   r   ry   r   r6   )r   hss     r   testPlagalModesTest.testPlagalModes  sP    $$T*rzz24Z[R//23T:r!   c           
        [         R                  " S5      nU R                  [        UR	                  S5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  U R                  UR                  5      S5        U R                  U R                  UR                  SS[        R                  S95      S5        U R                  U R                  UR                  SS[        R                  S95      S	5        U R                  [        UR                  S
[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  [        R                  S95      S5        U R                  [        UR	                  S5      5      S5        U R                  [        UR	                  S5      5      S5        U R                  [        UR	                  S[        R                  S95      S5        U R                  [        UR	                  S5      5      S5        U R                  [        UR	                  S[        R                  S95      S5        g )Nr]   rU   rS   D4z[C4, D4, F4, G4, A-4, C5]rP   r   z.[C2, D2, F2, G2, A-2, C3, D3, F3, G3, A-3, C4]zB[C4, B-3, A-3, G3, F3, E-3, D3, C3, B-2, A-2, G2, F2, E-2, D2, C2]r   D1d1F1f1zE-1ze-1r   C1rR   NoneE-4r%   zB-4)r   
RagAsawarir2   r   r6   rv   r   rt   r   ry   r4   ru   r   r   s     r   testRagAsawariTest.testRagAsawari  sR   d#R//23T:
 	R\\$	0C0CDEtLrzz24OP 	r}}T49K^K^}'_`I	K 	r}}T49K_K_}'`a]	_ 	R\\$	0C0CDEtLR\\$	0C0CDEtLR\\$	0D0DEFNR\\%*3*=*=6?6J6J * L M 	
 	R//23T:R//23V<R//Y=Q=Q/RS	  	R//23V<R//Y=Q=Q/RSUZ[r!   c           
        [         R                  " S5      nU R                  [        UR	                  S5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  U R                  UR                  5      S5        U R                  U R                  UR                  SS[        R                  S95      S	5        U R                  U R                  UR                  SS[        R                  S95      S
5        U R                  U R                  UR                  SS[        R                  S95      S5        U R                  U R                  UR                  SS[        R                  S95      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        g )Nr]   rU   rS   zD-4z'[C4, D-4, E4, F#4, A4, B4, A4, C5, D-5]rP   r   r   z"[C2, D-2, E2, F#2, A2, B2, A2, C3]z@[C2, D-2, E2, F#2, A2, B2, A2, C3, D-3, E3, F#3, A3, B3, A3, C4]zd-4z([D-4, C4, D-4, B3, A3, F#3, E3, D-3, C3]z[C4, B3, A3, F#3, E3, D-3, C3]r   zD-1zd-1E1e1zF#1r   A1B1B2r   zF#2E2D-2C2)r   RagMarwar2   r   r6   rv   r   rt   r   ry   r4   ru   r   s     r   testRagMarwaATest.testRagMarwaA  s   ^^D!R//23T:R\\$	0C0CDEuMrzz24]^ 	r}}T49K^K^}'_`=	? 	r}}T49K^K^}'_`[	] 	r}}T5IL`L`}'abC	E
 	r}}T49K_K_}'`a9	; 	R\\$	0C0CDEuMR\\%1D1DEFMR\\$	0C0CDEuMR\\%1D1DEFM 	R\\$	0C0CDEtLR\\$	0D0DEFMR\\$	0D0DEFNR\\$	0D0DEFNR\\$	0D0DEFNR\\%1D1DEFMr!   c                D   [         R                  " S5      n/ n[        S5       H2  nUR                  UR	                  S[
        R                  5      5        M4     U R                  UR                  S5      S5        U R                  UR                  S5      S5        / n[        S5       H2  nUR                  UR	                  S[
        R                  5      5        M4     U R                  UR                  S5      S5        U R                  UR                  S5      S5        g )	Nr]   d   r   r-   r   r%   zD-3r   )
r   r   r   rx   rn   r   rt   assertGreatercountru   r   r   postunused_xs       r   testRagMarwaBTest.testRagMarwaB  s    ^^D!
 c
HKK2249L9LMN #4::a="-4::a="-
 c
HKK225):N:NOP #4::a="-4::a="-r!   c           	        [         R                  " S5      nU R                  UR                  R                  R                  S[        R                  5      [        R                  " S5      [        R                  " S5      45        U R                  UR                  R                  R                  S[        R                  5      [        R                  " S5      [        R                  " S5      45        / n[        S5       H;  nUR                  [        UR                  S[        R                   5      5      5        M=     U R#                  UR%                  S5      S5        U R#                  UR%                  S5      S5        g )	Nr]   r   r   r   r   r   r   r   )r   r   r2   r   _netrealizeTerminir   LOWr   PitchrealizeMinMaxr   rx   r   rv   r   ru   r   r   r   s       r   testRagMarwaCTest.testRagMarwaC  s   ^^D!))88x||L++d+U[[->?	A 	))77hllK++d+U[[-?@	B c
HKKBLL	0D0DEFG #4::d+R04::d+R0r!   c           	     |   [         R                  " S5      nSnSn[        S5       HO  nU R                  UR	                  SS5      5      nUS:X  a  US-  nUS:X  a  US-  nU R                  US;   S	5        MQ     U R                  US5        U R                  US5        SnSn[        S5       H\  nU R                  UR	                  SS[        R                  S
95      nUS:X  a  US-  nUS:X  a  US-  nU R                  US;   S	5        M^     U R                  US5        U R                  US5        U R                  [        UR                  S5      5      S5        U R                  [        UR                  S[        R                  5      5      S5        U R                  [        UR                  S5      5      S5        g )Nr]   r   2   r   [C3, E-3, F3, G3, B-3, C4]rU   [C3, E-3, F3, F#3, G3, B-3, C4])r   r   Tr   [C4, B-3, G3, F3, E-3, C3][C4, B-3, G3, F#3, F3, E-3, C3])r   r   rS   r   r_   F#4)r   WeightedHexatonicBluesr   r   r4   r2   assertGreaterEqualr   ru   r   r6   rv   rt   )r   r   ijdummyr   s         r   testWeightedHexatonicBluesA Test.testWeightedHexatonicBluesA"  s   ))$/2YE MM"--d";<E44Q99QU '3 3   	1%1% 2YE MM"--diFZFZ-"[\E44Q99QU '3 3   	1%1%R//23T:R\\$	0C0CDEuM 	R//23U;r!   c           	        [         R                  " S5      nU R                  [        UR	                  S[
        R                  S5      5      S5        U R                  [        UR	                  S[
        R                  S5      5      S5        U R                  [        UR	                  S[
        R                  S5      5      S5        U R                  [        UR	                  S	[
        R                  S5      5      S
5        U R                  [        UR	                  S[
        R                  S5      5      S5        U R                  [        UR	                  S[
        R                  S5      5      S5        [         R                  " S5      nU R                  [        UR	                  S[
        R                  S5      5      S5        U R                  [        UR	                  S[
        R                  S5      5      S5        g )Nr]   r   rU   r   rh   C5b5C6ri   rS   r   r   c8B7r   r   zg#4A4)r   r1   r2   r   rv   r   rt   ru   r   s     r   	testNextATest.testNextAY  sf   d# 	R\\$	0C0CQGH$OR\\$	0C0CQGH$OR\\$	0C0CQGH$OR\\$	0C0CQGH$O 	R\\$	0D0DaHI4PR\\$	0D0DaHI4Pd#R\\%1D1DaHI4PR\\%1D1DaHI4Pr!   c                   [         R                  " S5      nU R                  [        UR	                  SS5      5      S5        U R                  [        UR	                  SS5      5      S5        U R                  [        UR	                  SS5      5      S	5        U R                  [        UR	                  S
S5      5      S5        [         R
                  " S5      nSn[        S5       H8  nS n UR	                  SS5      nUc  M  U R                  [        U5      S5        M:     U R                  US5        g ! [         R                   a    US-  n NRf = f)Nr]   rR   r_   z<music21.interval.Interval m2>rU   r%   z<music21.interval.Interval M7>r-   z<music21.interval.Interval P5>r   z<music21.interval.Interval m3>r   r   
   z<music21.interval.Interval A1>)	r   r1   r2   r   intervalBetweenDegreesr   r   ScaleException
assertLess)r   r   exceptCountr  r   s        r   testIntervalBetweenDegreesTest.testIntervalBetweenDegreesk  s-   d#R66q!<=?_`R66q!<=?_`R66q!<=?_`R66q!<=?_` ))$/2YED!00A6   T,LM  	Q'	 '' !q !s   ,D55EEc                   [        S5      n[        R                  " SU5      nU R                  [	        U5      S5        U R                  UR                  SS5      5      nU R                  [        R                  " US5      U5        g )Nab  ! fj-12tet.scl
            !
            Franck Jedrzejewski continued fractions approx. of 12-tet
             12
            !
            89/84
            55/49
            44/37
            63/50
            4/3
            99/70
            442/295
            27/17
            37/22
            98/55
            15/8
            2/1
            r]   z0<music21.scale.ScalaScale C Scala: fj-12tet.scl>rP   a  
            [C2, C#2(+0c), D2(-0c), E-2(-0c), E2(+0c), F2(-2c), F#2(+0c),
             G2, G#2(+1c), A2(+0c), B-2(+0c), B2(-12c),
             C3, C#3(+0c), D3(-0c), E-3(-0c), E3(+0c), F3(-2c), F#3(+0c),
             G3, G#3(+1c), A3(+0c), B-3(+0c), B3(-12c),
             C4])
r   r   
ScalaScaler2   r   r   r4   
assertTruer   whitespaceEqual)r   msgr   
pitchesOuts       r   testScalaScaleATest.testScalaScaleA  sx      & dC(R"TU]]2==t#<=
..z0 !	"r!   c                   [         R                  " S5      nUR                  5       nU R                  UR                  S5        SnU R                  [        R                  " UR                  5       U5      UR                  5       5        g )Nr]   r%   z!
            <music21.scale.MajorScale C major>
            7
            !
            200.0
            400.0
            500.0
            700.0
            900.0
            1100.0
            1200.0
            )	r   r1   getScalaDatar2   
pitchCountr  r   r  getFileString)r   r   ssr  s       r   testScalaScaleOutputTest.testScalaScaleOutput  sh    d#__* 	..r/?/?/A3GIYIYI[\r!   c           
         [         R                  " SS5      nU R                  UR                  R                  R
                  S5        UR                  nU R                  U R                  U5      S5        [         R                  " SS5      nU R                  U R                  UR                  5      S5        [         R                  " SS5      nU R                  U R                  UR                  5      S	5        [         R                  " SS
5      nU R                  U R                  UR                  5      S5        [         R                  " SS5      nU R                  U R                  UR                  5      S5        [         R                  " SS5      nU R                  U R                  UR                  5      S5        [        R                  " 5       nUR                  [        R                  " S5      5        [         R                  " SS5      n[         R                  " SS5      n[        R                  " 5       nUR                  UR                   Vs/ s H!  n[        R                  " XwR                   S9PM#     sn5        [        R                  " 5       nUR                  UR                   Vs/ s H!  n[        R                  " XwR                   S9PM#     sn5        UR#                  SU5        UR#                  SU5        g s  snf s  snf )Ne2zfj 12tet
mostCommonzv[E2, F2(+0c), F#2(-0c), G2(-0c), G#2(+0c), A2(-2c), B-2(+0c), B2(-0c), C3(+1c), C#3(+0c), D3(+0c), E-3(-12c), E3(+0c)]rP   z
mbira zimbzN[C2, C#2(-2c), D~2(+21c), E~2(+22c), F#~2(-8c), G~2(+21c), A~2(+2c), B~2(-2c)]
mbira_mudez[C2, C#~2(+24c), E-2(-11c), F#2(-25c), F#2(+12c), G~2(+20c), B~2(-4c), B-2(-24c), F3(-22c), D~3(+17c), F#~3(-2c), G#3(-13c), A3(+15c), C#~3(-24c), A3(+17c), B~3(-2c), C#~4(-22c), D~4(-4c), E~4(+10c), F#~4(-18c), G#4(+5c), B`4(+15c)]slendro_pliatzZ[C2, D~2(-15c), E~2(+4c), G2(+5c), A~2(-23c), C3, D~3(-15c), E~3(+4c), G3(+5c), A~3(-23c)]slendro_ang2z3[C2, E-2(-22c), F~2(+19c), G~2(-10c), B`2(-8c), C3]zslendroc5.sclz1[C2, D~2(-14c), E~2(+4c), G2(+5c), A~2(-22c), C3]z6/4)lyricr   )r   r  r2   	_abstractr   pitchSimplificationry   r   r   rs   rx   r	   TimeSignaturerz   r
   r0   	microtoner}   )	r   r   pListr   r   r   r   r   r   s	            r   testScalaScaleBTest.testScalaScaleB  sH   dJ/**>>M 

MM% @	A dL1MM"**%\	^
 dL1MM"**%\	] dO4rzz21	2
 dN3rzz2N	P dO4rzz2L	N MMO	$$U+,t^4t_5[[]
		CKKHKq499Qkk2KHI[[]
		CKKHKq499Qkk2KHI	B	B	 IHs   (L2(Lc                r   [         R                  " / SQS9nU R                  [        UR	                  5       5      S5        U R                  UR                  R                  5        U R                  U R                  UR                  5      S5        U R                  U R                  UR                  SS5      5      S5        U R                  U R                  UR                  SS5      5      S5        U R                  U R                  UR                  SS5      5      S	5        U R                  U R                  UR                  S
S5      5      S5        [         R                  " / SQS9nU R                  [        UR	                  5       5      S5        U R                  UR                  R                  5        g )N)	C#3E-3F3r^   r   zD~4r   r  C#5ry   r5  z)[C#3, E-3, F3, G3, B3, D~4, F#4, A4, C#5]r8  zC#1zM[C#1, E-1, F1, G1, B1, D~2, F#2, A2, C#3, E-3, F3, G3, B3, D~4, F#4, A4, C#5]C#4z[D~4, F#4, A4, C#5]zC#7z)[C#7, A6, F#6, D~6, B5, G5, F5, E-5, C#5])r5  r6  r7  r^   r   r:  )r   ConcreteScaler2   r   r=   assertFalser   octaveDuplicatingr   ry   r4   r  r   s     r   testConcreteScaleATest.testConcreteScaleA  sW     O
 	R[[]+U3667rzz2D	F 	r}}UE'BCD	F 	MM"--u56[	] 	r}}UE'BC.	0 	r}}UE'BCD	F   )PQR[[]+U3556r!   c                   [         R                  " S5      nUR                  S   nU R                  U R	                  UR
                  SS 5      S5        [        R                  " SS5      nU R                  U R	                  UR
                  5      S5        UR                  U5        UR                  S   nU R                  U R	                  UR
                  SS 5      S5        g )	Nr`   r   r  z,[C#5, B4, A4, B4, C#5, E5, C#5, B4, A4, C#5]rS   fokker_12.sclx[C4, C#4(+19c), D4(+4c), D~4(+17c), E4(-14c), F4(-2c), F#4(-10c), G4(+2c), G#4(+21c), A4(-16c), A~4(+19c), B4(-12c), C5]h[C#5(+19c), B4(-12c), A4(-16c), B4(-12c), C#5(+19c), E5(-14c), C#5(+19c), B4(-12c), A4(-16c), C#5(+19c)])	r   rp   rr   r2   r   ry   r   r  tune)r   r   r   r   s       r   	testTuneATest.testTuneA  s     LL#WWQZ 	rzz!B'78G	I dO4MM"**%>	? 	
WWQZMM"**Qr*+/	0r!   c                   [         R                  " SS5      nUR                  nU R                  U R	                  U5      S5        [
        R                  " S5      nUR                  U5        U R                  U R	                  UR                  S   R                  SS 5      S5        U R                  U R	                  UR                  S   R                  SS 5      S	5        g )
NrS   rA  rB  r`   r   r  rC  rU   zg[E4(-14c), F#4(-10c), E4(-14c), E4(-14c), E4(-14c), E4(-14c), A4(-16c), G#4(+21c), E4(-14c), G#4(+21c)])	r   r  ry   r2   r   r   rp   rD  rr   )r   r   plr   s       r   	testTuneBTest.testTuneB(  s     dO4ZZMM">	?
 LL#

MM!''!*,,Qr23/	0
 	qwwqz'9'9!B'?@Q	Rr!   c                   [         R                  " S5      R                  SS5      nUR                   H+  nU[        R
                     R                  5       nSUl        M-     [        R                  " SS5      nUR                  U5        UR                  5       R                   H  nUR                  c  M  UR                  R                  S:X  a   UR                  R                   S	-   Ul        ML  UR                  R                  S
:X  a0  UR"                  S:X  a   UR                  R                   S-
  Ul        M  UR                  R                  S
:X  d  M  UR                  R                   S	-
  Ul        M     g)z
Applies a pythagorean tuning to a section of D. Luca's Gloria
and then uses Marchetto da Padova's very high sharps and very low
flats (except B-flat) to inflect the accidentals
zluca/gloriaF   O   4   F2zpyth_12.sclNsharp-   flatr$      )r   rp   measuresrr   r   
InstrumentfirstmidiProgramr   r  rD  flattenry   
accidentalr3   r0  centsr5   )r   r   r   instr   s        r   testTunePythagoreanTest.testTunePythagorean>  s    LL'00R8AZ**+113D!D  dM2

$$A||'<<$$/"#++"3"3b"8AK\\&&&0QVVs]"#++"3"3b"8AK\\&&&0"#++"3"3b"8AK %r!   c                    [         R                  " S5      nU R                  U R                  UR                  5      S5        g )Nr]   z9[C4, C#4, D4, E-4, E4, F4, F#4, G4, A-4, A4, B-4, B4, C5])r   ChromaticScaler2   r   ry   )r   css     r   testChromaticScaleATest.testChromaticScaleAW  s3    !!$'rzz2T	Vr!   c                   [         R                  " SSSS9nU R                  U R                  UR	                  SS5      5      S5        [         R                  " SSSS9nU R                  U R                  UR	                  SS5      5      S	5        [         R                  " SSS
S9nU R                  U R                  UR	                  SS5      5      S5        g )Nd4z1@0r   )eldrP   r]   z<[C2, D2, F-2, G-2, A-2, B-2, C3, D3, F-3, G-3, A-3, B-3, C4]rc   z[C2, C~2, D-2, D`2, D2, D~2, E-2, E`2, F-2, F`2, F2, F~2, G-2, G`2, G2, G~2, A-2, A`2, A2, A~2, B-2, B`2, C-3, C`3, C3, C~3, D-3, D`3, D3, D~3, E-3, E`3, F-3, F`3, F3, F~3, G-3, G`3, G3, G~3, A-3, A`3, A3, A~3, B-3, B`3, C-4, C`4, C4]rd   r   as  [C2, C2(+25c), C~2, C#2(-25c), D-2, D`2(-25c), D`2, D2(-25c), D2, D2(+25c), D~2, D#2(-25c), E-2, E`2(-25c), E`2, E2(-25c), F-2, F`2(-25c), F`2, F2(-25c), F2, F2(+25c), F~2, F#2(-25c), G-2, G`2(-25c), G`2, G2(-25c), G2, G2(+25c), G~2, G#2(-25c), A-2, A`2(-25c), A`2, A2(-25c), A2, A2(+25c), A~2, A#2(-25c), B-2, B`2(-25c), B`2, B2(-25c), C-3, C`3(-25c), C`3, C3(-25c), C3])r   
SieveScaler2   r   r4   r   s     r   testSieveScaleATest.testSieveScaleA\  s     dEq1r}}T4'@AW	Y dEs3MM"--d346	
 dEt4MM"--d34	
r!   c                    [         R                  " / SQS9nUR                  / SQSS9nU R                  [	        U5      SR                  / SQ5      [	        U5      5        g )N)r'   r$   r(   r)   r*   r+   r   r'   r9  )r(   r*   r&   r3   r[    )z0[(3, <music21.scale.ConcreteScale F Concrete>), z/(3, <music21.scale.ConcreteScale E Concrete>), z/(2, <music21.scale.ConcreteScale B Concrete>), z.(2, <music21.scale.ConcreteScale A Concrete>)])r   r;  deriveRankedr2   r   join)r   r   es      r   testDerivedScaleNoOctavesTest.testDerivedScaleNoOctaves{  sU    (QRNN?NGQ "U V Q	r!   c                    [         R                  " / SQS9nU R                  [        R                  5         UR                  / SQSS9  S S S 5        g ! , (       d  f       g = f)N)r  r   rS   r   rb   F4rT   r  r9  )rS   rb   rT   r3   r[   )r   r;  assertRaisesr   IntervalNetworkExceptionrk  )r   rm  s     r   testDerivedScaleAbsurdOctaves"Test.testDerivedScaleAbsurdOctaves  sE    (XYGGHNN-6NJ IHHs   A
A c                ^   [         R                  " S5      n[        S5       Hv  nU R                  US9   UR	                  [
        R                  S9nU R                  US   R                  S5        U R                  US   R                  S5        S	S	S	5        Mx     g	! , (       d  f       M  = f)
z<
Worth testing because we found cached lists being mutated.
r(   rR   )
iterationsr   r   r  rS   N)	r   r1   r   subTestr4   r   ru   r2   r   )r   c_majr  r   s       r   test_getPitches_multiple_times#Test.test_getPitches_multiple_times  s       %qA+ '')2F2F'G  a!7!7>  b!8!8$? ,+ ++s   AB
B,	 N) __name__
__module____qualname____firstlineno__r   rM   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r2  r>  rE  rI  r\  ra  rg  rn  rt  r{  __static_attributes__r}  r!   r   r   r      s    C>J~d@%GN
P*9XxB_L;
#\J&NP.*1 ,<nQ$(*"B](5p 7D02R,92V

>	K
@r!   r   __main__)
__future__r   pprintr   textwrapr   unittestmusic21r   r   r   r	   r
   r   r   music21.scaler   r   r   r   TestCaser   r~  mainTestr}  r!   r   <module>r     sh    #           ) - z@8 z@| zT r!   