§
    ƒØj"D  ã                  ó   — 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
  ej        d
¦  «        Z G d„ dej        ¦  «        Z	 	 	 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)Úchord)Úenvironment)Úexceptions21)Únote)Úpitch)Úscale)Ústreamzalpha.analysis.searchc                  ó   — e Zd ZdS )ÚSearchModuleExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú’/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/alpha/analysis/search.pyr   r      s   € € € € € Ø€Dr   r   é   é   ÚnameTFc                ó˜  — t          |t          j        ¦  «        st          d¦  «        ‚d}d}d}	d}
d}d}g }g }t	          ¦   «         }d}d}d}g }t          j        ¦   «         }| D ]‰}t          |t          j        ¦  «        rŒt          |t          j
        ¦  «        r|rŒ:t          |t          j        t          j        f¦  «        r)|                     |                      |¦  «        |¦  «         ŒŠt!          |¦  «        D �]Ê\  }}|t#          |¦  «        dz
  k     r||dz            }nd}t%          |d¦  «        �rX|j        }
|�t%          |d¦  «        r|j        }	nd}	d}|€t          j        j        }n|}|                     |
||¬¦  «        }|€d}nü|€d}n¶|r||z
  dk    rd}n¨|                     |
|t          j        j        ||¬	¦  «        r)|dt          j        j        fv rd}t          j        j        }nV|                     |
|t          j        j        ||¬	¦  «        r)|dt          j        j        fv rd}t          j        j        }nd}d}|r?|                     |¦  «         |                     |
¦  «         |                     |¦  «         |}|
}t#          |¦  «        |k    r|                     |	|
|d|¬	¦  «        rnd}|r¼t          j        ¦   «         }|D ]+}|                     |                      |¦  «        |¦  «         Œ,||d
œ}|                     |¦  «         d}|du r[|du rW|                     |	|
t          j        j        ||¬	¦  «        s)|                     |	|
t          j        j        ||¬	¦  «        rd}nd}|rd}d}t	          ¦   «         }g }g }d}|r-d}t	          ¦   «         }|                     |¦  «         |
g}|g}d}�ŒÌ|S )a‰  
    Given a pitch source and a concrete scale, return references to all
    elements found that represent consecutive scale segments in one direction.

    The `targetScale` is a concrete scale instance.

    The `degreesRequired` specifies how many consecutive scale degrees
    are required for grouping. Note that if more are found, they will
    continue to be gathered until a break is found.

    The `stepSize` determines what scale step size is examined

    The `comparisonAttribute` is the Pitch class attribute used
    for all pitch comparisons; this can be used to force enharmonic
    comparison ('name'), pitch space comparison ('nameWithOctave') or
    permit pitch class matching ('pitchClass').

    If `repeatsAllowed` is True, repeated Pitches will be counted as
    part of the consecutive segment.

    If `restsAllowed` is True, rests will not interrupt a consecutive segment.
    z$scale must be a concrete scale classNFr   r   )ÚcomparisonAttributeÚ	directionTr   )ÚstepSizer   )r
   r   )Ú
isinstancer	   ÚConcreteScaler   Úsetr
   ÚStreamr   ÚChordr   ÚRestr   ÚPitchÚNoteÚinsertÚelementOffsetÚ	enumerateÚlenÚhasattrÚ	DirectionÚBIÚgetScaleDegreeFromPitchÚisNextÚ	ASCENDINGÚ
DESCENDINGÚaddÚappend)ÚsourceÚtargetScaleÚdegreesRequiredr   r   ÚrepeatsAllowedÚrestsAllowedÚ
degreeLastÚpLastÚpNextÚpÚdÚdirectionLastÚcollPitchesÚcollElementsÚcollDegreesÚclearCollectÚclearCollectKeepLastÚmatchÚ	collMatchÚsourceCleanÚeÚeCountÚeNextÚcollectÚdirDegreeGetÚpostÚinnerElÚ
dictionarys                                r   ÚfindConsecutiveScalerJ      sÜ  € õ4 �k¥5Ô#6Ñ7Ô7ð LÝ#Ð$JÑKÔKÐKà€JØ€EØ€EØ€AØ€AØ€Mà€KØ€LÝ‘%”%€Kà€LØ ÐØ€EØ€Iõ ”-‘/”/€KØð ;ð ;ˆÝ�a�œÑ%Ô%ð 	ØÝ�a�œÑ#Ô#ð 	¨ð 	Øõ �a�%œ+¥t¤yÐ1Ñ2Ô2ð 	;Ø×Ò˜v×3Ò3°AÑ6Ô6¸Ñ:Ô:Ð:øõ ˜{Ñ+Ô+ð [)ñ [)‰	ˆ�ð •C˜Ñ$Ô$ qÑ(Ò(Ð(Ø ¨¡
Ô+ˆEˆEàˆEå�1�gÑÔñ O	Ø”ˆAØÐ ¥W¨U°GÑ%<Ô%<Ð Øœ��à�ð ˆGàÐ$Ý$œÔ1��à,�Ø×3Ò3°AØH[Ø>Jð 4ñ Lô LˆAð
 ˆyØ#��ð Ð%Ø"�G�Gð $ð 0¨
°Q©¸!Ò(;Ð(;Ø"�G�Gà!×(Ò(¨¨Eµ5´?Ô3LØ2:Ø=Pð )ñ Rô Rð 0ð (¨Dµ%´/Ô2KÐ+LÐLÐLð #�GÝ$)¤OÔ$=�M�Mà!×(Ò(¨¨Eµ5´?Ô3MØ2:Ø=Pð )ñ Rô Rð 0ð (¨Dµ%´/Ô2LÐ+MÐMÐMð #�GÝ$)¤OÔ$>�M�Mð
 $�Gð ,0Ð(ð
 ð +à—O’O AÑ&Ô&Ð&Ø×&Ò& qÑ)Ô)Ð)Ø ×'Ò'¨Ñ*Ô*Ð*ð ˆJØˆEõ ˆ{ÑÔ˜Ò.Ð.ð ×!Ò! %Ø"#Ø"/Ø+,Ø6Ið	 "ñ Kô Kð ð
 ð �àð 	(å”=‘?”?ˆDð (ð Dð D�à—’˜F×0Ò0°Ñ9Ô9¸7ÑCÔCÐCÐCØ$(°}ÐEÐEˆJØ×Ò˜ZÑ(Ô(Ð(ØˆEð ˜uÐ$Ð$Ð)=ÀÐ)FÐ)Fà ×'Ò'¨¨qµ%´/Ô2LØ19Ø<Oð (ñ Qô Qð (ð '×-Ò-¨e°Q½¼Ô8QØ7?ØBUð .ñ Wô Wð(ð ,0Ð(Ð(à#'�Làð 	!ð ˆJØ ˆMÝ™%œ%ˆKØˆKØˆLØ ˆLð  ð 
	)ð
 !ˆMÝ™%œ%ˆKØ�OŠO˜AÑÔÐØ˜#ˆKØ˜3ˆLØ#(Ð ùàÐr   c                  ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚTestc                óB   — ddl m}  || t          ¦   «         ¦  «         d S )Nr   )ÚtestCopyAll)Úmusic21.test.commonTestrN   Úglobals)ÚselfrN   s     r   ÚtestCopyAndDeepcopyzTest.testCopyAndDeepcopyý   s0   € Ø7Ð7Ð7Ð7Ð7Ð7Øˆ�D�'™)œ)Ñ$Ô$Ð$Ð$Ð$r   c                ó�  — t          j        d¦  «        }t          j        ¦   «         }dD ]+}t	          j        |¦  «        }|                     |¦  «         Œ,t          ||d¬¦  «        }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         t          j        ¦   «         }dD ]+}t	          j        |¦  «        }|                     |¦  «         Œ,t          ||dd	¬
¦  «        }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         t          j        ¦   «         }dD ]+}t	          j        |¦  «        }|                     |¦  «         Œ,t          ||dd	¬
¦  «        }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         t          j        ¦   «         }dD ]+}t	          j        |¦  «        }|                     |¦  «         Œ,t          ||dd¬
¦  «        }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         t          j        ¦   «         }dD ]+}t	          j        |¦  «        }|                     |¦  «         Œ,t          ||dd	¬
¦  «        }|                      t          |¦  «        d¦  «         t          ||dd	¬
¦  «        }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         t          j        ¦   «         }g d¢}g d¢}| 
                    ¦   «          ||z   |z   |z   |z   D ]+}t	          j        |¦  «        }|                     |¦  «         Œ,t          ||dd	¬
¦  «        }|                      t          |¦  «        d¦  «         t          ||dd¬
¦  «        }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         t          j        ¦   «         }g d¢}g d¢}| 
                    ¦   «          ||z   ddgz   |z   dgz   |z   ddgz   |z   D ]+}t	          j        |¦  «        }|                     |¦  «         Œ,t          ||dd	¬
¦  «        }|                      t          |¦  «        d¦  «         t          ||dd¬
¦  «        }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         |                      t          |d         d         ¦  «        d¦  «         |                      |d         d         d         j        j        d¦  «         d S )NÚa4)rT   Úb4zc#4Úd4Úe4úf#4úg#4rT   é   )r1   r   r   r
   é   ÚnameWithOctave©r1   r   é   )
rT   rU   úc#5Úd5Úe5rT   rU   r_   r`   ra   é   r   )
rT   Úb8zc#3Úd3rW   rT   Úb9zc#2rV   Úe12r   )rT   rU   r_   úd-3rT   rU   r_   rg   rT   rU   r_   rg   é   )r_   rd   rW   rX   rY   zC#5zG#4Úg2ze#7za-2ÚaÚb)r	   Ú
MajorScaler
   r   r   r!   r.   rJ   ÚassertEqualr%   Úreverser   r\   )rQ   ÚscÚpartÚpnÚnrG   ÚstubÚstubReverseds           r   ÚtestFindConsecutiveScaleAzTest.testFindConsecutiveScaleA  s&	  € ÝÔ˜dÑ#Ô#ˆõ Œ}‰ŒˆØEð 	ð 	ˆBÝ”	˜"‘”ˆAØ�KŠK˜‰NŒNˆNˆNõ $ D¨"¸aÐ@Ñ@Ô@ˆØ×Ò�˜T™œ AÑ&Ô&Ð&Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3åŒ}‰ŒˆØEð 	ð 	ˆBÝ”	˜"‘”ˆAØ�KŠK˜‰NŒNˆNˆNõ $ D¨"¸aØ8HðJñ Jô Jˆà×Ò�˜T™œ AÑ&Ô&Ð&Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3åŒ}‰ŒˆØPð 	ð 	ˆBÝ”	˜"‘”ˆAØ�KŠK˜‰NŒNˆNˆNå# D¨"¸aØ8HðJñ Jô Jˆà×Ò�˜T™œ AÑ&Ô&Ð&Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3õ Œ}‰ŒˆØQð 	ð 	ˆBÝ”	˜"‘”ˆAØ�KŠK˜‰NŒNˆNˆNõ $ D¨"¸aÐU[Ð\Ñ\Ô\ˆØ×Ò�˜T™œ AÑ&Ô&Ð&Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3õ Œ}‰ŒˆØ`ð 	ð 	ˆBÝ”	˜"‘”ˆAØ�KŠK˜‰NŒNˆNˆNõ $ D¨"¸aØ8HðJñ Jô Jˆà×Ò�˜T™œ AÑ&Ô&Ð&å# D¨"¸aØ8HðJñ Jô Jˆà×Ò�˜T™œ AÑ&Ô&Ð&à×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3õ Œ}‰ŒˆØ0Ð0Ð0ˆØ8Ð8Ð8ˆØ×ÒÑÔÐà˜,Ñ&¨Ñ-°Ñ<¸|ÑKð 	ð 	ˆBÝ”	˜"‘”ˆAØ�KŠK˜‰NŒNˆNˆNõ $ D¨"¸aØ8HðJñ Jô Jˆà×Ò�˜T™œ AÑ&Ô&Ð&õ $ D¨"¸aÐU[Ð\Ñ\Ô\ˆØ×Ò�˜T™œ AÑ&Ô&Ð&à×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJõ Œ}‰ŒˆØ0Ð0Ð0ˆØ8Ð8Ð8ˆØ×ÒÑÔÐàØ!ñ"à˜E�]ñ#ð ñð �Wñ	ð
 "ñ"ð ˜3�Zñ ð "ñ"ð 		ð 		ˆBõ ”	˜"‘”ˆAØ�KŠK˜‰NŒNˆNˆNõ $ D¨"¸aØ8HðJñ Jô Jˆà×Ò�˜T™œ AÑ&Ô&Ð&õ $ D¨"¸aÐU[Ð\Ñ\Ô\ˆØ×Ò�˜T™œ AÑ&Ô&Ð&à×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJØ×Ò�˜T !œW XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò˜˜aœ Ô*¨1Ô-Ô3ÔBÀEÑJÔJÐJÐJÐJr   c           	     óä  — ddl m} t          j        d¦  «        }t          j        d¦  «        }t          j        d¦  «        }|                     d¦  «                             dd¦  «        }|||fD ]~}|j        D ]t}t          |                     ¦   «         |d	d
¬¦  «        }t          |¦  «        D ]=\  }	}
|
D ]5}| 
                    |                     ¦   «         j        › |	dz   › �¦  «         Œ6Œ>ŒuŒd S )Nr   )ÚcorpusÚg4rT   rV   zmozart/k80/movement1r   é   r   r   r]   )Úmusic21rw   r	   rl   ÚparseÚmeasuresÚpartsrJ   Úflattenr$   ÚaddLyricÚgetTonicr   )rQ   rw   ÚscGMajorÚscAMajorÚscDMajorÚsro   rp   rG   ÚgÚgrouprr   s               r   ÚxtestFindConsecutiveScaleBzTest.xtestFindConsecutiveScaleB‡  s3  € Ø"Ð"Ð"Ð"Ð"Ð"åÔ# DÑ)Ô)ˆÝÔ# DÑ)Ô)ˆÝÔ# DÑ)Ô)ˆà�LŠLÐ/Ñ0Ô0×9Ò9¸!¸RÑ@Ô@ˆØ˜X xÐ0ð 	Cð 	CˆBØœð Cð C�å+¨D¯LªL©N¬N¸BÐPQØ@FðHñ Hô H�å )¨$¡¤ð Cð C‘H�A�uØ"ð Cð C˜ØŸ
š
 b§k¢k¡m¤mÔ&8Ð#A¸!¸a¹%Ð#AÐ#AÑBÔBÐBÐBðCðCð	Cð	Cð 	Cr   N)r   r   r   rR   ru   r‡   r   r   r   rL   rL   ü   sM   € € € € € ð%ð %ð %ðDKð DKð DKðLCð Cð Cð Cð Cr   rL   Ú__main__)r   r   r   TF)Ú
__future__r   Úunittestrz   r   r   r   r   r   r	   r
   ÚEnvironmentÚenvironLocalÚMusic21Exceptionr   rJ   ÚTestCaserL   r   ÚmainTestr   r   r   ú<module>r�      sz  ðð #Ð "Ð "Ð "Ð "Ð "à €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à&ˆ{Ô&Ð'>Ñ?Ô?€ð	ð 	ð 	ð 	ð 	˜LÔ9ñ 	ô 	ð 	ð ?@Ø9?Ø;@ð[ð [ð [ð [ð~ZCð ZCð ZCð ZCð ZCˆ8Ôñ ZCô ZCð ZCðP ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   