
    3j7                       d Z ddlmZ ddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z
  ej                  d      Z G d	 d
ej                        Zedk(  r-ddlZ eej$                        dk(  r ej&                  e       yyy)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                  ~    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y)Testc                .   ddl m} ddl m} |j                         }t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]	  }|D ]  }  y)z.
        Stream iteration by iterator
        r   notestream    d   N)music21r   r   StreamrangeNoteappendRestselfr   r   sinrjs           I/DATA/.local/lib/python3.12/site-packages/music21/test/testPerformance.pyrunStreamIterationByIteratorz!Test.runStreamIterationByIterator"   s|     	!"MMOtA		AHHQK  sA		AHHQK  sA      c                B   ddl m} ddl m} |j                         }t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]  }|j                  D ]  }  y)z6
        Stream iteration by .elements access
        r   r   r   r   r   r   N)	r   r   r   r   r   r   r   r   elementsr   s           r   runStreamIterationByElementsz!Test.runStreamIterationByElements5   s     	!"MMOtA		AHHQK  sA		AHHQK  sAZZ   r!   c                   ddl m} ddl m} |j                         }t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]R  }|j                         j                  |j                  |j
                  g      }| j                  t        |      d       T y)	z0
        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   runGetElementsByClassTypezTest.runGetElementsByClassTypeH   s     	!" MMOtA		AHHQK  sA		AHHQK  qA99;11499dii2HIDSY- r!   c                   ddl m} ddl m} |j                         }t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]#  }|j                         }|j                  |       % t	        d      D ]>  }|j                         j                  ddg      }| j                  t        |      d	       @ y
)z,
        Getting elements by string
        r   r   r   r   r   r&   r   r   r'   Nr(   r-   s           r   runGetElementsByClassStringz Test.runGetElementsByClassString\   s     	!" MMOtA		AHHQK  sA		AHHQK  qA99;11662BCDSY- r!   c                2    t        j                  dd      }y)=
        Loading file: beethoven/opus59no2/movement3
        beethoven/opus59no2/movement3TforceSourceNr   parser   junks     r   runParseBeethovenzTest.runParseBeethovenp   s     ||;Nr!   c                    t        j                  dd      }|j                  D ]  }t               j                  |      } y)zi
        Loading file and rendering musicxml output for each part: beethoven/opus59no2/movement3
        r4   Tr5   N)r   r8   partsGEX)r   xpr:   s       r   runMusicxmlOutPartsBeethovenz!Test.runMusicxmlOutPartsBeethovenv   s2     LL8dKA5;;q>D r!   c                d    t        j                  dd      }t               j                  |      }y)zm
        Loading file and rendering musicxml output of complete score: beethoven/opus59no2/movement3
        r4   Tr5   Nr   r8   r>   r   r?   r:   s      r   runMusicxmlOutScoreBeethovenz!Test.runMusicxmlOutScoreBeethoven   s$     LL8dKu{{1~r!   c                2    t        j                  dd      }y)z9
        Loading file: haydn/opus74no1/movement3
        zhaydn/opus74no1/movement3Tr5   Nr7   r9   s     r   runParseHaydnzTest.runParseHaydn   s     ||7TJr!   c                2    t        j                  dd      }y)zC
        Loading file: schumann_robert/opus41no1/movement2
        z#schumann_robert/opus41no1/movement2Tr5   Nr7   r9   s     r   runParseRobertSchumannzTest.runParseRobertSchumann   s     ||AtTr!   c                2    t        j                  dd      }y)z+
        Loading file: luca/gloria
        luca/gloriaTr5   Nr7   r9   s     r   runParseLucazTest.runParseLuca   s     ||Mt<r!   c                d    t        j                  dd      }t               j                  |      }y)zI
        Loading file and rendering musicxml output: luca/gloria
        rK   Tr5   NrC   rD   s      r   runMusicxmlOutLucazTest.runMusicxmlOutLuca   s#     LLD9u{{1~r!   c                x    ddl m} g d}t        d      D ]"  }|j                  ||t	        |      z            $ y)z4
        Creating 500 TimeSignature objects
        r   meter)4/4rR   rR   3/4rS   2/4rT   2/2rU   z3/8z6/8z9/8z5/4z12/8r   N)r   rQ   r   TimeSignaturer,   )r   rQ   tsStrr   s       r   runCreateTimeSignatureszTest.runCreateTimeSignatures   s9     	"< sAa#e*n 56 r!   c                    ddl m} g d}t        d      D ]6  }||t        |      z     }|j	                         }||_        |j
                  }8 y)z1
        Creating 10000 Duration objects
        r   )duration)   r&      g      ?gUUUUUU?g      ?g      ?i'  N)r   rZ   r   r,   DurationquarterLength)r   rZ   qlListr   qldr:   s          r   runCreateDurationszTest.runCreateDurations   sJ     	%3uACK(B!!#A AO??D	 r!   c                    ddl m} g d}t        d      D ]7  }||t        |      z     }|j	                  |      }|j                  dd       9 y)	z.
        Creating 50000 Pitch objects
        r   )pitch)g      ?   guOUU4@   g      @zA#zb`zc6#~iP  p5T)inPlaceN)r   rd   r   r,   Pitch	transpose)r   rd   pListr   
inputPNamer@   s         r   runCreatePitcheszTest.runCreatePitches   sJ     	"?uAq3u:~.JJ'AKKdK+ r!   c                .    t        j                  d      }y)zH
        Creating loading a large multiple work abc file (han1)
        zessenFolksong/han1Nr7   )r   dummys     r   runParseABCzTest.runParseABC   s     12r!   c                   ddl m} ddl m} ddl m} ddl m} t        j                  d      }|j                         }|j                         j                  }|j                  D ]  }|j                  |j                        D ]  }	|	j                  dk(  r|	j                  |j                        }
|
J |	j                  |j                        }
|
J |	j                  |j                         }
|
J |	j"                  D ]_  }|j                  |j                        }
|
J |j                  |j                        }
|
J |j                  |j                         }
|
_J    y)z@
        Test getting elements by context from a Stream
        r   r   clefkeyrP   bwv66.6N)r   r   rs   ru   rQ   r   r8   flattennotesr=   r*   MeasurenumbergetContextByClassClefrV   KeySignaturenotesAndRestsr   r   rs   ru   rQ   r   unused_flatunused_notesr@   mr.   r   s               r   runGetElementsByContextzTest.runGetElementsByContext   sE    	# !LL#iikyy{((A))&..988q=**4995'''**5+>+>?'''**3+;+;<'''A..tyy9D+++..u/B/BCD+++..s/?/?@D+++ ) : r!   c                   ddl m} ddl m} ddl m} ddl m} t        j                  d      }|j                         }|j                         j                  }|j                  D ]  }|j                  |j                        D ]  }	|	j                  dk(  r|	j                  |j                        }
|
J |	j                  |j                        }
|
J |	j                  |j                         }
|
J |	j"                  D ]_  }|j%                  |j                        }
|
J |j%                  |j                        }
|
J |j%                  |j                         }
|
_J    y)zD
        Test getting elements by using the previous method
        r   r   rr   rt   rP   rv   N)r   r   rs   ru   rQ   r   r8   rw   rx   r=   r*   ry   rz   previousr|   rV   r}   r~   r{   r   s               r   runGetElementsByPreviousz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                2    t        j                  dd      }y)r3   zmonteverdi/madrigal.5.3.rntxtTr5   Nr7   )r   unuseds     r   runParseMonteverdiRNTextzTest.runParseMonteverdiRNText  s     =4Pr!   c                   | j                   ddif| j                  dddffD ]  \  }}t        j                         }|j	                           |        |j                           |       }t        |j                               }|j                          |j                          t        j                  dt        |j                  j                               d|d|D cg c]  \  }}| d	|  c}}d
g        yc c}}w )a  
        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   r?   ys           r   testTimingTolerancez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__r    r$   r/   r1   r;   rA   rE   rG   rI   rL   rN   rX   rb   rm   rp   r   r   r   r    r!   r   r	   r	       sh    &&.(.(O"KU=	7#
,3,B,BQF&r!   r	   __main__r\   )r   
__future__r   unittestr   r   r   r   music21.musicxml.m21ToXmlr   r>   Environmentr   TestCaser	   r   sysr,   argvmainTestr   r!   r   <module>r      s    #      B&{&&'=>
y&8 y&z z
388}  r!   