
    3jE                       d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlmZ  G d dej(                        Zedk(  rd dlZ ej.                  e       yy)    )annotations)pformat)dedentN)common)corpus)
instrument)meter)note)pitch)scale)intervalNetwork)Terminus	Direction)streamc                      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y)Testc                f    d}|D ]  }|t        |      dz   z  } |dt        |      dz
   }|dz  }|S )N[z, r      ])strlen)selflistInoutps       J/DATA/.local/lib/python3.12/site-packages/music21/scale/test_scale_main.pypitchOutzTest.pitchOut   sE    A3q6D= C !CHqL!s

    c                   t        j                         }t        j                  |      }| j	                  |j
                  d       | j	                  |j                         d   j                  d       |j                  d      }| j	                  |j                  d       |j                         }| j	                  |j                  d       t        j                         }d|_        |j                         }| j	                  |j
                  dd|j
                  z          |j                         D cg c]  }|j
                   }}| j	                  |g d	       t        j                         }	d
|	_        d|	_        t        j                  |	      }
| j	                  |
j
                  dd|
j
                  z          |
j                         D cg c]  }|j
                   }}| j	                  |g d       | j	                  |
j                         d   |	j                         | j	                  |
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       y c c}w c c}w )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   testBasicLegacyz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   3MMc           	        t        j                         }| j                  | j                  |j	                  dd            d       |j                  d      }| j                  | j                  |j	                  dd            d       | j                  t        |j                  d            d       | j                  t        |j                  d            d	       | j                  | j                  |j                  g d
            d       | j                  | j                  |j                  ddgdd            d       t        j                  d      }| j                  |j                  d      d       | j                  |j                  d      d        | j                  |j                  dd      d       | j                  |j                  dd      d       t        j                  d      }| j                  t        |j                  d            d       | j                  t        |j                  d            d       t        j                         }t        j                  d      }|j                  |j                  d         }| j                  t        |      d       |j                  |j                  d          }| j                  t        |      d       |j                  |j                  d!         }| j                  t        |      d"       t!        j"                         }d#}t        j                  d$      }t$        j&                  dft$        j(                  dft$        j&                  dft$        j(                  dft$        j&                  dft$        j(                  dft$        j&                  dffD ]M  \  }}	d%D ]C  }
|j+                  |||	&      }t-        j.                  |      }|
|_        |j3                  |       E O | j                  | j                  |j4                        d'       t!        j6                         }t!        j6                         }d(}d)}t        j8                  d      }t$        j&                  dft$        j(                  dft$        j&                  dft$        j(                  dft$        j&                  dffD ]  \  }}	d*D ]C  }
|j+                  |||	&      }t-        j.                  |      }|
|_        |j3                  |       E |t$        j&                  k(  rt$        j(                  }n#|t$        j(                  k(  rt$        j&                  }d*D ]C  }
|j+                  |||	&      }t-        j.                  |      }|
|_        |j3                  |       E  t!        j:                         }|j=                  d+|       |j=                  d+|       t        j                  d,      }t        j                  d-      }t        j                  d.      }| j?                  ||       | j                  |j@                  |j@                         | j?                  ||       | j?                  |j@                  |j@                         | j                  tC        |jE                  |            d/tC        |jE                  |                   y )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-rR   zg#
pitchClasscomparisonAttributeze-r1   r+   c4G3   bwv66.6z#soprano"<music21.scale.MajorScale A major>z#tenorz#bassz#<music21.scale.MinorScale F# minor>zd#4E4)rR         ?r`         ?ra   ra   ra   	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)rR   r`   ra   ra   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   r8   r0   r   r2   	transposer   r4   pitchesFromScaleDegreesr/   getScaleDegreeFromPitchHypophrygianScaler   parsederivepartsr   Streamr   	ASCENDING
DESCENDING	nextPitchr
   r.   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   	testBasiczTest.testBasicl   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-/DAq ;LLa!L<IIaL"#	 ;	/ 	qyy14	5 [[][[]!!$'))1-	0D0Da/H9K^K^`aJb**A.1D1Da0HJDAq)\\"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           	        t        j                  dddg      }| j                  | j                  |j	                  dd            d       | j                  |j
                  j                         d       | j                  t        |j                  d            d       | j                  t        |j                  dd	d
            d       t        j                  ddg      }| j                  | j                  |j                        d       | j                  | j                  |j	                  dd            d       | j                  |j                  d      d       | j                  |j                  dt        j                        d       t        j                         }| j                  | j                  |j	                               d       y )NrZ   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   rR   rP   rM   c3zB#1P5z[C4, G4]g2z[B-2, F3, C4, G4, D5, A5, E6]zb-2rc   z	[C4, D-4])r   CyclicalScaler0   r   r2   r|   getDegreeMaxUniquer   r4   rv   rk   r   rq   )r   r   r~   s      r   testCyclicalScalesz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                V   t        j                         }| j                  t        |j	                  dd            d       t        j
                         }| j                  t        |j	                  dd            d       | j                  t        |j	                  dd            d       y )Nr#   G#r^   z3<music21.scale.HarmonicMinorScale A harmonic minor>r   r(   z3<music21.scale.HarmonicMinorScale D harmonic minor>)r   r/   r0   r   deriveByDegreeHarmonicMinorScale)r   r   s     r   testDeriveByDegreezTest.testDeriveByDegree  s     S//489=	? &&(S//489N	PS//378N	Pr   c           	     |   t        j                  d      }| j                  | j                  |j                        d       | j                  | j                  |j                  t        j                              d       | j                  | j                  |j                  ddt        j                              d       | j                  | j                  |j                  ddt        j                              d       | j                  | j                  |j                  ddt        j                              d       | j                  | j                  |j                  dd	t        j                              d
       | j                  | j                  |j                  dd	t        j                              d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  dt        j                        d        | j                  |j                  dt        j                        d       | j                  | j                  |j                  ddt        j                              d       | j                  |j                  dt        j                        d       | j                  |j                  dt        j                        d       | j                  |j                  dt        j                        d       | j                  |j                  dt        j                        d       | j                  |j                  dt        j                        j                  d       | j                  |j                  dt        j                        j                  d       | j                  |j                  dt        j                        j                  d       y )Nrh   "[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]a3rR   rf   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   MelodicMinorScaler0   r   rv   r2   r   rq   rr   rk   BIrs   nameWithOctave)r   mms     r   testMelodicMinorAz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           	     	   t        j                  d      }| j                  |j                  dt        j
                        j                  d       | j                  |j                  dt        j
                        j                  d       | j                  |j                  dt        j
                        j                  d       | j                  |j                  dt        j                        j                  d	       | j                  | j                  |j                  d
d
t        j                              d       | j                  | j                  |j                  d
d
t        j
                              d       | j                  t        |j                  dt        j
                              d       | j                  t        |j                  dt        j
                              d       | j                  t        |j                  dt        j
                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d	       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d	       | j                  t        |j                  dt        j                  t        j                              d       | j                  t        |j                  dt        j
                              d       | j                  t        |j                  dt        j
                  t        j                              d       t        j                         }d}t        j                  d      }t        d      D ]{  }|dz  dk(  rt        j
                  }g d}nt        j                  }g d}|D ]C  }|j                  ||d      }t        j                   |      }	||	_        |j%                  |	       E } |j'                  d       | j                  | j                  |j(                        d       y
) z]
        Need to test descending form of getting pitches with no defined min and max
        rh   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   )rR   r`   r`   r   ra   ra   ra   ra   )rR   r`   rR   r`   r`   rR   rb   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   r0   r4   r   rq   r   rr   r   r2   r   rs   r   rp   ranger
   r.   rt   ru   makeAccidentalsrv   )
r   r   r   r   r   rc   r   qlsr   r   s
             r   testMelodicMinorBzTest.testMelodicMinorBd  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a!L<IIaL"#	  " 	
$'MM!))$^	_r   c                    t        j                  d      }| j                  | j                  |j                        d       | j                  t        |j                  d            d       y )NrZ   z$[G3, A-3, B-3, C4, D-4, E-4, F4, G4]rR   r[   )r   rl   r0   r   rv   r   r4   )r   hss     r   testPlagalModeszTest.testPlagalModes  sP    $$T*rzz24Z[R//23T:r   c           	        t        j                  d      }| j                  t        |j	                  d            d       | j                  t        |j                  dt        j                              d       | j                  | j                  |j                        d       | j                  | j                  |j                  ddt        j                              d       | j                  | j                  |j                  ddt        j                              d	       | j                  t        |j                  d
t        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                  t        j                              d       | j                  t        |j	                  d            d       | j                  t        |j	                  d            d       | j                  t        |j	                  dt        j                              d       | j                  t        |j	                  d            d       | j                  t        |j	                  dt        j                              d       y )NrZ   rR   rP   D4z[C4, D4, F4, G4, A-4, C5]rM   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   C1rO   NoneE-4r#   zB-4)r   
RagAsawarir0   r   r4   rs   r   rq   r   rv   r2   rr   r   r   s     r   testRagAsawariz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           	        t        j                  d      }| j                  t        |j	                  d            d       | j                  t        |j                  dt        j                              d       | j                  | j                  |j                        d       | j                  | j                  |j                  ddt        j                              d	       | j                  | j                  |j                  ddt        j                              d
       | j                  | j                  |j                  ddt        j                              d       | j                  | j                  |j                  ddt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  dt        j                              d       y )NrZ   rR   rP   zD-4z'[C4, D-4, E4, F#4, A4, B4, A4, C5, D-5]rM   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   RagMarwar0   r   r4   rs   r   rq   r   rv   r2   rr   r   s     r   testRagMarwaAz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                :   t        j                  d      }g }t        d      D ]1  }|j                  |j	                  dt
        j                               3 | j                  |j                  d      d       | j                  |j                  d      d       g }t        d      D ]1  }|j                  |j	                  dt
        j                               3 | j                  |j                  d      d       | j                  |j                  d      d       y )	NrZ   d   r   r+      r#   zD-3r   )
r   r   r   ru   rk   r   rq   assertGreatercountrr   r   r   postunused_xs       r   testRagMarwaBz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           	        t        j                  d      }| j                  |j                  j                  j                  dt        j                        t        j                  d      t        j                  d      f       | j                  |j                  j                  j                  dt        j                        t        j                  d      t        j                  d      f       g }t        d      D ]:  }|j                  t        |j                  dt        j                                      < | j#                  |j%                  d      d       | j#                  |j%                  d      d       y )	NrZ   r   r   r   r   r   r   r   )r   r   r0   r|   _netrealizeTerminir   LOWr   PitchrealizeMinMaxr   ru   r   rs   r   rr   r   r   r   s       r   testRagMarwaCz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                l   t        j                  d      }d}d}t        d      D ]K  }| j                  |j	                  dd            }|dk(  r|dz  }|dk(  r|dz  }| j                  |dv d	       M | j                  |d       | j                  |d       d}d}t        d      D ][  }| j                  |j	                  ddt        j                  
            }|dk(  r|dz  }|dk(  r|dz  }| j                  |dv d	       ] | j                  |d       | j                  |d       | j                  t        |j                  d            d       | j                  t        |j                  dt        j                              d       | j                  t        |j                  d            d       y )NrZ   r   2   r   [C3, E-3, F3, G3, B-3, C4]rR   [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   rP   r   r\   F#4)r   WeightedHexatonicBluesr   r   r2   r0   assertGreaterEqualr   rr   r   r4   rs   rq   )r   r   ijdummyr}   s         r   testWeightedHexatonicBluesAz 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           	        t        j                  d      }| j                  t        |j	                  dt
        j                  d            d       | j                  t        |j	                  dt
        j                  d            d       | j                  t        |j	                  dt
        j                  d            d       | j                  t        |j	                  d	t
        j                  d            d
       | j                  t        |j	                  dt
        j                  d            d       | j                  t        |j	                  dt
        j                  d            d       t        j                  d      }| j                  t        |j	                  dt
        j                  d            d       | j                  t        |j	                  dt
        j                  d            d       y )NrZ   r   rR   r   re   C5b5C6rf   rP   r   r   c8B7r   r   zg#4A4)r   r/   r0   r   rs   r   rq   rr   r   s     r   	testNextAzTest.testNextAX  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                   t        j                  d      }| j                  t        |j	                  dd            d       | j                  t        |j	                  dd            d       | j                  t        |j	                  dd            d	       | j                  t        |j	                  d
d            d       t        j
                  d      }d}t        d      D ]5  }d }	 |j	                  dd      }|| j                  t        |      d       7 | j                  |d       y # t         j                  $ r |dz  }Y Mw xY w)NrZ   rO   r\   z<music21.interval.Interval m2>rR   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   r/   r0   r   intervalBetweenDegreesr   r   ScaleException
assertLess)r   r   exceptCountr   r   s        r   testIntervalBetweenDegreeszTest.testIntervalBetweenDegreesj  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   *D//E
	E
c                
   t        d      }t        j                  d|      }| j                  t	        |      d       | j                  |j                  dd            }| j                  t        j                  |d      |       y )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
            rZ   z0<music21.scale.ScalaScale C Scala: fj-12tet.scl>rM   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   
ScalaScaler0   r   r   r2   
assertTruer   whitespaceEqual)r   msgr   
pitchesOuts       r   testScalaScaleAzTest.testScalaScaleA  sx      & dC(R"TU]]2==t#<=
..z0 !	"r   c                   t        j                  d      }|j                         }| j                  |j                  d       d}| j                  t        j                  |j                         |      |j                                y )NrZ   r#   z!
            <music21.scale.MajorScale C major>
            7
            !
            200.0
            400.0
            500.0
            700.0
            900.0
            1100.0
            1200.0
            )	r   r/   getScalaDatar0   
pitchCountr
  r   r  getFileString)r   r   ssr  s       r   testScalaScaleOutputzTest.testScalaScaleOutput  sh    d#__* 	..r/?/?/A3GIYIYI[\r   c           	        t        j                  dd      }| j                  |j                  j                  j
                  d       |j                  }| j                  | j                  |      d       t        j                  dd      }| j                  | j                  |j                        d       t        j                  dd      }| j                  | j                  |j                        d	       t        j                  dd
      }| j                  | j                  |j                        d       t        j                  dd      }| j                  | j                  |j                        d       t        j                  dd      }| j                  | j                  |j                        d       t        j                         }|j                  t        j                  d             t        j                  dd      }t        j                  dd      }t        j                         }|j                  |j                  D cg c]#  }t        j                  ||j                         % c}       t        j                         }|j                  |j                  D cg c]#  }t        j                  ||j                         % c}       |j#                  d|       |j#                  d|       y c c}w c c}w )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)]rM   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	  r0   	_abstractr   pitchSimplificationrv   r   r   rp   ru   r	   TimeSignaturerw   r
   r.   	microtonerz   )	r   r   pListr   r   r~   r   r   r   s	            r   testScalaScaleBzTest.testScalaScaleB  sL   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HKq499Qakk2KHI[[]
		CKKHKq499Qakk2KHI	B	B	 IHs   
(K:&(K?c                z   t        j                  g d      }| j                  t        |j	                               d       | j                  |j                  j                         | j                  | j                  |j                        d       | j                  | j                  |j                  dd            d       | j                  | j                  |j                  dd            d       | j                  | j                  |j                  dd            d	       | j                  | j                  |j                  d
d            d       t        j                  g d      }| j                  t        |j	                               d       | j                  |j                  j                         y )N)	C#3E-3F3r[   r   zD~4r   r   C#5rv   r#  z)[C#3, E-3, F3, G3, B3, D~4, F#4, A4, C#5]r&  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])r#  r$  r%  r[   r   r(  )r   ConcreteScaler0   r   r;   assertFalser|   octaveDuplicatingr   rv   r2   r
  r   s     r   testConcreteScaleAz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                   t        j                  d      }|j                  d   }| j                  | j	                  |j
                  dd       d       t        j                  dd      }| j                  | j	                  |j
                        d       |j                  |       |j                  d   }| j                  | j	                  |j
                  dd       d       y )	Nr]   r   r  z,[C#5, B4, A4, B4, C#5, E5, C#5, B4, A4, C#5]rP   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   rm   ro   r0   r   rv   r   r	  tune)r   r   r   r   s       r   	testTuneAzTest.testTuneA  s     LL#WWQZ 	rzz!B'78G	I dO4MM"**%>	? 	
WWQZMM"**Qr*+/	0r   c                   t        j                  dd      }|j                  }| j                  | j	                  |      d       t        j                  d      }|j                  |       | j                  | j	                  |j                  d   j                  dd       d       | j                  | j	                  |j                  d   j                  dd       d	       y )
NrP   r.  r/  r]   r   r  r0  rR   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	  rv   r0   r   r   rm   r1  ro   )r   r   plr   s       r   	testTuneBzTest.testTuneB'  s     dO4ZZMM">	?
 LL#

MM!''!*,,Qr23/	0
 	qwwqz'9'9!B'?@Q	Rr   c                   t        j                  d      j                  dd      }|j                  D ]*  }|t        j
                     j                         }d|_        , t        j                  dd      }|j                  |       |j                         j                  D ]  }|j                  |j                  j                  dk(  r|j                  j                   d	z   |_        H|j                  j                  d
k(  r.|j"                  dk(  r|j                  j                   dz
  |_        |j                  j                  d
k(  s|j                  j                   d	z
  |_         y)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   rm   measuresro   r   
InstrumentfirstmidiProgramr   r	  r1  flattenrv   
accidentalr1   r  centsr3   )r   r   r   instr   s        r   testTunePythagoreanz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                    t        j                  d      }| j                  | j                  |j                        d       y )NrZ   z9[C4, C#4, D4, E-4, E4, F4, F#4, G4, A-4, A4, B-4, B4, C5])r   ChromaticScaler0   r   rv   )r   css     r   testChromaticScaleAzTest.testChromaticScaleAV  s3    !!$'rzz2T	Vr   c                   t        j                  ddd      }| j                  | j                  |j	                  dd            d       t        j                  ddd      }| j                  | j                  |j	                  dd            d	       t        j                  ddd
      }| j                  | j                  |j	                  dd            d       y )Nd4z1@0r   )eldrM   rZ   z<[C2, D2, F-2, G-2, A-2, B-2, C3, D3, F-3, G-3, A-3, B-3, C4]r`   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]ra   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   
SieveScaler0   r   r2   r   s     r   testSieveScaleAz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                    t        j                  g d      }|j                  g dd      }| j                  t	        |      dj                  g d      t	        |             y )N)r%   r"   r&   r'   r(   r)   r   r%   r'  )r&   r(   r$   r1   rX    )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)  deriveRankedr0   r   join)r   r   es      r   testDerivedScaleNoOctaveszTest.testDerivedScaleNoOctavesz  sU    (QRNN?NGQ "U V Q	r   c                    t        j                  g d      }| j                  t        j                        5  |j                  g dd       d d d        y # 1 sw Y   y xY w)N)r   r   rP   r   r_   F4rQ   r   r'  )rP   r_   rQ   r1   rX   )r   r)  assertRaisesr   IntervalNetworkExceptionrS  )r   rU  s     r   testDerivedScaleAbsurdOctavesz"Test.testDerivedScaleAbsurdOctaves  sE    (XYGGHNN-6NJ IHHs   AA c                X   t        j                  d      }t        d      D ]{  }| j                  |      5  |j	                  t
        j                        }| j                  |d   j                  d       | j                  |d   j                  d       d	d	d	       } y	# 1 sw Y   xY w)
zL
        Worth testing because we found cached lists being mutated.
        r&   rO   )
iterationsr   r   r   rP   N)	r   r/   r   subTestr2   r   rr   r0   r   )r   c_majr   r   s       r   test_getPitches_multiple_timesz#Test.test_getPitches_multiple_times  s       %qA+ '')2F2F'G  a!7!7>  b!8!8$? ,+ ++s   AB  B)	N)__name__
__module____qualname__r   rK   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r,  r2  r5  rG  rK  rP  rV  r[  ra   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   rb  mainTestre  r   r   <module>ro     sj    #           ) - z@8 z@| zGT r   