§
    ƒØj  ã                  óî   — 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  ej	        d¦  «        Z
 G d	„ d
¦  «        Z G d„ dej        ¦  «        Zedk    rd dlZ ej        e¦  «         dS dS )é    )ÚannotationsN)Úclef)Ú	converter)Úenvironment)Únote)Úintervalzanalysis.segmentByRestsc                  óB   — e Zd ZdZe	 dd„¦   «         Zed„ ¦   «         ZdS )Ú	SegmenterzP
    Given a work or part, returns a list of melodic segments or intervals.
    Tc                ó,  — g }g }|                      ¦   «                              g d¢¦  «        }t          t          |¦  «        ¦  «        D ]¢}||         }t	          |t
          j        ¦  «        r@|                     |¦  «         |t          |¦  «        dz
  k    r|                     |¦  «         t	          |t
          j        t          j
        f¦  «        r|                     |¦  «         g }Œ¢Œ£|r%|ddd…         D ]}|s|                     |¦  «         Œ|S )aj  
        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	            ú”/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/analysis/segmentByRests.pyÚgetSegmentsListzSegmenter.getSegmentsList   s'  € ð& ˆØˆØ×&Ò&Ñ(Ô(×;Ò;Ð<TÐ<TÐ<TÑUÔUˆ	Ý•s˜9‘~”~Ñ&Ô&ð 
	ð 
	ˆAØ˜!”ˆAÝ˜!�TœYÑ'Ô'ð 1Ø×"Ò" 1Ñ%Ô%Ð%à�˜I™œ¨Ñ*Ò*Ð*Ø—O’O KÑ0Ô0Ð0Ý˜!�dœi­¬Ð3Ñ4Ô4ð Ø—’ Ñ,Ô,Ð,Ø �Øðð ð 	-Ø# D D b Dœ>ð -ð -�Øð -Ø—O’O GÑ,Ô,Ð,øØˆó    c                ó¶  — g }|                      ¦   «                              g d¢¦  «        }t          t          |¦  «        dz
  ¦  «        D ]�}||         }t	          |t
          j        t          j        f¦  «        rŒ1||dz            }t	          |t
          j        t          j        f¦  «        rŒct          j
        ||¦  «        }|                     |¦  «         ŒŽ|S )aº  
        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"   ÚgetIntervalListzSegmenter.getIntervalListE   sÕ   € ð ˆØ ×(Ò(Ñ*Ô*×=Ò=Ð>VÐ>VÐ>VÑWÔWˆÝ•s˜;Ñ'Ô'¨!Ñ+Ñ,Ô,ð 	-ð 	-ˆAØ˜Q”ˆBÝ˜"�tœy­$¬)Ð4Ñ5Ô5ð ØØ˜Q ™UÔ#ˆBÝ˜"�tœy­$¬)Ð4Ñ5Ô5ð ØÝ"Ô+¨B°Ñ3Ô3ˆKØ×Ò Ñ,Ô,Ð,Ð,ØÐr$   N)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr#   r,   © r$   r"   r
   r
      s_   € € € € € ðð ð ð *.ð&ð &ð &ñ „[ð&ðP ðð ñ „[ðð ð r$   r
   c                  ó   — e Zd Zd„ Zd„ ZdS )ÚTestc                óò   — t          j        d¦  «        }t                               |¦  «        }|                      |d         t
          ¦  «         |                      |d         d         j        d¦  «         d S )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"   ÚtestGetSegmentsListzTest.testGetSegmentsLista   sf   € ÝŒ_ÐAÑBÔBˆÝ×,Ò,¨RÑ0Ô0ˆà×Ò˜h qœk­4Ñ0Ô0Ð0Ø×Ò˜ !œ QœÔ,¨cÑ2Ô2Ð2Ð2Ð2r$   c                óÚ   — t          j        d¦  «        }t                               |¦  «        }|                      |d         j        d¦  «         |                      |t          ¦  «         d S )Nr6   r   ÚM2)r   r8   r
   r,   r;   r<   r9   r:   )r=   r>   r'   s      r"   ÚtestGetIntervalListzTest.testGetIntervalListh   s^   € ÝŒ_ÐAÑBÔBˆÝ ×0Ò0°Ñ4Ô4ˆà×Ò˜ aœÔ-¨tÑ4Ô4Ð4Ø×Ò˜l­DÑ1Ô1Ð1Ð1Ð1r$   N)r-   r.   r/   r?   rB   r2   r$   r"   r4   r4   _   s2   € € € € € ð3ð 3ð 3ð2ð 2ð 2ð 2ð 2r$   r4   Ú__main__)Ú
__future__r   ÚunittestÚmusic21r   r   r   r   r   ÚEnvironmentÚenvironLocalr
   ÚTestCaser4   r-   ÚmainTestr2   r$   r"   ú<module>rK      s$  ðð #Ð "Ð "Ð "Ð "Ð "à €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à&ˆ{Ô&Ð'@ÑAÔA€ðDð Dð Dð Dð Dñ Dô Dð DðN2ð 2ð 2ð 2ð 2ˆ8Ôñ 2ô 2ð 2ð$ ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr$   