
    rh                         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  \R                  " S5      r
 " S	 S
5      r " S S\R                  5      r\S:X  a  S SKr\R                  " \5        gg)    )annotationsN)clef)	converter)environment)note)intervalzanalysis.segmentByRestsc                  >    \ rS rSrSr\ SS j5       r\S 5       rSrg)	Segmenter   zH
Given a work or part, returns a list of melodic segments or intervals.
c                   / n/ nUR                  5       R                  / SQ5      n[        [        U5      5       H  nXV   n[	        U[
        R                  5      (       a4  UR                  U5        U[        U5      S-
  :X  a  UR                  U5        [	        U[
        R                  [        R                  45      (       d  M  UR                  U5        / nM     U(       a)  USSS2    H  nU(       a  M  UR                  U5        M     U$ )a
  
Segments a part by its rests (and clefs) and returns a list of lists where
each sublist is one segment of contiguous notes. NB Uses .recurse() internally.

>>> example = converter.parse("tinyNotation: C4 r D E r r F r G r A B r c")
>>> segments = analysis.segmentByRests.Segmenter.getSegmentsList(example)
>>> segments
[[<music21.note.Note C>],
 [<music21.note.Note D>, <music21.note.Note E>],
 [<music21.note.Note F>],
 [<music21.note.Note G>],
 [<music21.note.Note A>, <music21.note.Note B>],
 [<music21.note.Note C>]]
NoteRestClef   N)recursegetElementsByClassrangelen
isinstancer   r   appendr   r   r   remove)	cls
workOrPartremoveEmptyListssegmentsthisSegment	partNotesinsegments	            Y/home/james-whalen/.local/lib/python3.13/site-packages/music21/analysis/segmentByRests.pygetSegmentsListSegmenter.getSegmentsList   s    & &&(;;<TU	s9~&AA!TYY''""1%I**OOK0!dii344,  ' #DbD>wOOG, *     c                   / nUR                  5       R                  / SQ5      n[        [        U5      S-
  5       H  nX4   n[	        U[
        R                  [        R                  45      (       a  M8  X4S-      n[	        U[
        R                  [        R                  45      (       a  Mp  [        R                  " XV5      nUR                  U5        M     U$ )az  
Given a work or part, returns a list of intervals between contiguous notes.
NB Uses .recurse() internally so
if called on a work then returns a list of lists with one list per part.

>>> example = converter.parse("tinyNotation: 4/4 E4 r F G A r g c r c")
>>> intList = analysis.segmentByRests.Segmenter.getIntervalList(example)
>>> [x.name for x in intList]
['M2', 'M2', 'P5']
r   r   )r   r   r   r   r   r   r   r   r   r   Intervalr   )r   r   intervalListelementListr    n1n2intervalObjs           r#   getIntervalListSegmenter.getIntervalListF   s      ((*==>VWs;'!+,AB"tyy$))455U#B"tyy$))455"++B3K, - r&    N)T)	__name__
__module____qualname____firstlineno____doc__classmethodr$   r.   __static_attributes__r0   r&   r#   r
   r
      s5      *.& &P  r&   r
   c                       \ rS rSrS rS rSrg)Test`   c                    [         R                  " S5      n[        R                  U5      nU R	                  US   [
        5        U R                  US   S   R                  S5        g )N"tinyNotation: E4 r F G A r g c r cr   r   F)r   parser
   r$   assertIsInstancelistassertEqualname)selfexr   s      r#   testGetSegmentsListTest.testGetSegmentsListb   sS    __AB,,R0hqk40!Q,,c2r&   c                    [         R                  " S5      n[        R                  U5      nU R	                  US   R
                  S5        U R                  U[        5        g )Nr<   r   M2)r   r>   r
   r.   rA   rB   r?   r@   )rC   rD   r)   s      r#   testGetIntervalListTest.testGetIntervalListi   sK    __AB 004a--t4lD1r&   r0   N)r1   r2   r3   r4   rE   rI   r7   r0   r&   r#   r9   r9   `   s    32r&   r9   __main__)
__future__r   unittestmusic21r   r   r   r   r   EnvironmentenvironLocalr
   TestCaser9   r1   mainTestr0   r&   r#   <module>rS      sl    #      &&'@AD DN28 2$ zT r&   