
    rh#7                    
   S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSKJr  SSKJ	r
  \R                  " S5      r " S	 S
\R                  5      r\S:X  a.  SSKr\" \R$                  5      S:X  a  \R&                  " \5        ggg)z
This module defines a number of performance test.
 Results for these performances are stored and dated,
 and used to track long-term performance changes.

This file is not run with the standard test battery presently.
    )annotationsN)common)corpus)environment)GeneralObjectExporterztest.testPerformancec                      \ 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                >   SSK Jn  SSK Jn  UR                  5       n[	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       H  nU H  nM     M     g)z
Stream iteration by iterator
r   notestream    d   N)music21r   r   StreamrangeNoteappendRestselfr   r   sinrjs           V/home/james-whalen/.local/lib/python3.13/site-packages/music21/test/testPerformance.pyrunStreamIterationByIterator!Test.runStreamIterationByIterator#   s|     	!"MMOtA		AHHQK  sA		AHHQK  sA      c                R   SSK Jn  SSK Jn  UR                  5       n[	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       H  nUR                   H  nM     M     g)z&
Stream iteration by .elements access
r   r   r   r   r   r   N)	r   r   r   r   r   r   r   r   elementsr   s           r    runStreamIterationByElements!Test.runStreamIterationByElements6   s     	!"MMOtA		AHHQK  sA		AHHQK  sAZZ   r#   c                   SSK Jn  SSK Jn  UR                  5       n[	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       HS  nUR                  5       R                  UR                  UR
                  /5      nU R                  [        U5      S5        MU     g)	z 
Getting elements by class type
r   r   r   r   r        Nr   r   r   r   r   r   r   r   recursegetElementsByClassassertEquallenr   r   r   r   r   r   r   posts           r    runGetElementsByClassTypeTest.runGetElementsByClassTypeI   s     	!" MMOtA		AHHQK  sA		AHHQK  qA99;11499dii2HIDSY- r#   c                   SSK Jn  SSK Jn  UR                  5       n[	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       H$  nUR                  5       nUR                  U5        M&     [	        S5       H?  nUR                  5       R                  SS/5      nU R                  [        U5      S	5        MA     g
)z
Getting elements by string
r   r   r   r   r   r)   r   r   r*   Nr+   r0   s           r    runGetElementsByClassString Test.runGetElementsByClassString]   s     	!" MMOtA		AHHQK  sA		AHHQK  qA99;11662BCDSY- r#   c                .    [         R                  " SSS9ng)-
Loading file: beethoven/opus59no2/movement3
beethoven/opus59no2/movement3TforceSourceNr   parser   junks     r    runParseBeethovenTest.runParseBeethovenq   s     ||;Nr#   c                    [         R                  " SSS9nUR                   H  n[        5       R                  U5      nM     g)zY
Loading file and rendering musicxml output for each part: beethoven/opus59no2/movement3
r9   Tr:   N)r   r=   partsGEX)r   xpr?   s       r    runMusicxmlOutPartsBeethoven!Test.runMusicxmlOutPartsBeethovenw   s2     LL8dKA5;;q>D r#   c                `    [         R                  " SSS9n[        5       R                  U5      ng)z]
Loading file and rendering musicxml output of complete score: beethoven/opus59no2/movement3
r9   Tr:   Nr   r=   rD   r   rE   r?   s      r    runMusicxmlOutScoreBeethoven!Test.runMusicxmlOutScoreBeethoven   s$     LL8dKu{{1~r#   c                .    [         R                  " SSS9ng)z)
Loading file: haydn/opus74no1/movement3
zhaydn/opus74no1/movement3Tr:   Nr<   r>   s     r    runParseHaydnTest.runParseHaydn   s     ||7TJr#   c                .    [         R                  " SSS9ng)z3
Loading file: schumann_robert/opus41no1/movement2
z#schumann_robert/opus41no1/movement2Tr:   Nr<   r>   s     r    runParseRobertSchumannTest.runParseRobertSchumann   s     ||AtTr#   c                .    [         R                  " SSS9ng)z
Loading file: luca/gloria
luca/gloriaTr:   Nr<   r>   s     r    runParseLucaTest.runParseLuca   s     ||Mt<r#   c                `    [         R                  " SSS9n[        5       R                  U5      ng)z9
Loading file and rendering musicxml output: luca/gloria
rU   Tr:   NrJ   rK   s      r    runMusicxmlOutLucaTest.runMusicxmlOutLuca   s#     LLD9u{{1~r#   c                z    SSK Jn  / SQn[        S5       H"  nUR                  X#[	        U5      -     5        M$     g)z$
Creating 500 TimeSignature objects
r   meter)4/4r^   r^   3/4r_   2/4r`   2/2ra   z3/8z6/8z9/8z5/4z12/8r   N)r   r]   r   TimeSignaturer/   )r   r]   tsStrr   s       r    runCreateTimeSignaturesTest.runCreateTimeSignatures   s7     	"< sA#e*n 56 r#   c                    SSK Jn  / SQn[        S5       H5  nX#[        U5      -     nUR	                  5       nXEl        UR
                  nM7     g)z!
Creating 10000 Duration objects
r   )duration)   r)      g      ?gUUUUUU?g      ?g      ?i'  N)r   rg   r   r/   DurationquarterLength)r   rg   qlListr   qldr?   s          r    runCreateDurationsTest.runCreateDurations   sF     	%3uACK(B!!#A O??D	 r#   c                    SSK Jn  / SQn[        S5       H4  nX#[        U5      -     nUR	                  U5      nUR                  SSS9  M6     g)	z
Creating 50000 Pitch objects
r   )pitch)g      ?   guOUU4@   g      @zA#zb`zc6#~iP  p5T)inPlaceN)r   rr   r   r/   Pitch	transpose)r   rr   pListr   
inputPNamerF   s         r    runCreatePitchesTest.runCreatePitches   sH     	"?uA3u:~.JJ'AKKdK+ r#   c                0    [         R                  " S5      ng)z8
Creating loading a large multiple work abc file (han1)
zessenFolksong/han1Nr<   )r   dummys     r    runParseABCTest.runParseABC   s     12r#   c                   SSK Jn  SSK Jn  SSK Jn  SSK Jn  [
        R                  " S5      nUR                  5       nUR                  5       R                  nUR                   GH  nUR                  UR                  5       H  n	U	R                  S:X  a  M  U	R                  UR                  5      n
U
c   eU	R                  UR                  5      n
U
c   eU	R                  UR                   5      n
U
c   eU	R"                   Hc  nUR                  UR                  5      n
U
c   eUR                  UR                  5      n
U
c   eUR                  UR                   5      n
U
b  Mc   e   M     GM     g)z0
Test getting elements by context from a Stream
r   r   clefkeyr\   bwv66.6N)r   r   r   r   r]   r   r=   flattennotesrC   r-   MeasurenumbergetContextByClassClefrb   KeySignaturenotesAndRestsr   r   r   r   r]   r   unused_flatunused_notesrF   mr1   r   s               r    runGetElementsByContextTest.runGetElementsByContext   sE    	# !LL#iikyy{((A))&..988q=**4995'''**5+>+>?'''**3+;+;<'''A..tyy9D+++..u/B/BCD+++..s/?/?@D+++ ) : r#   c                   SSK Jn  SSK Jn  SSK Jn  SSK Jn  [
        R                  " S5      nUR                  5       nUR                  5       R                  nUR                   GH  nUR                  UR                  5       H  n	U	R                  S:X  a  M  U	R                  UR                  5      n
U
c   eU	R                  UR                  5      n
U
c   eU	R                  UR                   5      n
U
c   eU	R"                   Hc  nUR%                  UR                  5      n
U
c   eUR%                  UR                  5      n
U
c   eUR%                  UR                   5      n
U
b  Mc   e   M     GM     g)z4
Test getting elements by using the previous method
r   r   r   r   r\   r   N)r   r   r   r   r]   r   r=   r   r   rC   r-   r   r   previousr   rb   r   r   r   r   s               r    runGetElementsByPreviousTest.runGetElementsByPrevious   s?    	# !LL#iikyy{((A))&..988q=zz$)),'''zz%"5"56'''zz#"2"23'''A..tyy9D+++..u/B/BCD+++..s/?/?@D+++ ) : r#   c                .    [         R                  " SSS9ng)r8   zmonteverdi/madrigal.5.3.rntxtTr:   Nr<   )r   unuseds     r    runParseMonteverdiRNTextTest.runParseMonteverdiRNText  s     =4Pr#   c                
   U R                   SS04U R                  SSS.44 H  u  p[        R                  " 5       nUR	                  5         U" 5         UR                  5         U" 5       n[        UR                  5       5      nUR                  5         UR                  5         [        R                  S[        UR                  R                  5       5      SUSU VVs/ s H  u  pgU S	U 3PM     snnS
/5        M     gs  snnf )z
Test the performance of methods defined above,
comparing the resulting time to the time obtained in past runs.

This should not produce errors as such, but is used to provide reference
if overall performance has changed.
z
2011.11.29g(\@g,&@g@)z
2010.11.10z
2010.11.11z

timing tolerance for:z

this run:z
best runs:z: 
N)r   r   r   TimerstartstoplistitemssortreverseenvironLocal
printDebugstr__doc__strip)r   
testMethodbesttdurr   rE   ys           r    testTimingToleranceTest.testTimingTolerance  s     ** $
 ))"+"/m!
J^ AGGILFFH#C&EJJLMMO##%@%(););)A)A)C%D%2C>C%Deda2aSke%Dd%' &qm!
v &Es   C? N)__name__
__module____qualname____firstlineno__r!   r&   r2   r5   r@   rG   rL   rO   rR   rV   rY   rd   ro   r{   r   r   r   r   r   __static_attributes__r   r#   r    r	   r	   !   sh    &&.(.(O"KU=	7#
,3,B,BQF&r#   r	   __main__ri   )r   
__future__r   unittestr   r   r   r   music21.musicxml.m21ToXmlr   rD   Environmentr   TestCaser	   r   sysr/   argvmainTestr   r#   r    <module>r      s|    #      B&&'=>
y&8 y&z z
388}  r#   