§
    „Øj×  ã                  ó  — 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  ej	        d¦  «        Z
 G d„ dej        ¦  «        Z G d	„ d
ej        j        ¦  «        Z G d„ dej        ¦  «        ZdZedk    rddlZ ej        e¦  «         dS dS )z9
Tools for performing voice-leading analysis with trees.
é    )ÚannotationsN)Úenvironment)Úexceptions21ztree.analysisc                  ó   — e Zd ZdS )ÚHorizontalityExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    úŠ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/tree/analysis.pyr   r      ó   € € € € € Ø€Dr   r   c                  ór   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Ze	d„ ¦   «         Z
e	d	„ ¦   «         Ze	d
„ ¦   «         ZdS )ÚHorizontalityz…
    A horizontality of consecutive PitchedTimespan objects.

    It must be initiated with a list or tuple of Timespan objects.
    ©Ú	timespansNc                ó  — t          |t          j        j        ¦  «        st	          d|›�¦  «        ‚|st	          d¦  «        ‚t          d„ |D ¦   «         ¦  «        st	          d¦  «        ‚t          |¦  «        | _        d S )Nz"timespans must be a sequence, not z9there must be at least one timespan in the timespans listc              3  óV   K  — | ]$}t          |d ¦  «        ot          |d¦  «        V — Œ%dS )ÚoffsetÚendTimeN)Úhasattr©Ú.0Úxs     r   ú	<genexpr>z)Horizontality.__init__.<locals>.<genexpr>4   s;   è è € ÐUÐUÀa•7˜1˜hÑ'Ô'ÐA­G°A°yÑ,AÔ,AÐUÐUÐUÐUÐUÐUr   z5only Timespan objects can be added to a horizontality)Ú
isinstanceÚcollectionsÚabcÚSequencer   ÚallÚtupler   )Úselfr   s     r   Ú__init__zHorizontality.__init__.   s”   € Ý˜)¥[¤_Ô%=Ñ>Ô>ð 	]Ý(Ð)[ÈiÐ)[Ð)[Ñ\Ô\Ð\Øð 	MÝ(ØKñMô Mð MåÐUÐUÈ9ÐUÑUÔUÑUÔUð 	bÝ(Ð)`ÑaÔaÐaÝ˜yÑ)Ô)ˆŒˆˆr   c                ó   — | j         |         S ©Nr   )r#   Úitems     r   Ú__getitem__zHorizontality.__getitem__:   s   € ØŒ~˜dÔ#Ð#r   c                ó*   — t          | j        ¦  «        S r&   )Úlenr   )r#   s    r   Ú__len__zHorizontality.__len__=   s   € Ý�4”>Ñ"Ô"Ð"r   c                óî   — g }| D ]A}d                      d„ |j        D ¦   «         ¦  «        }d|› d�}|                     |¦  «         ŒBd                      |¦  «        }dt          | ¦  «        j        › d|› d�S )	Nz, c              3  ó$   K  — | ]}|j         V — Œd S r&   )ÚnameWithOctave)r   Úys     r   r   z)Horizontality.__repr__.<locals>.<genexpr>C   s%   è è € Ð%JÐ%J¸1 aÔ&6Ð%JÐ%JÐ%JÐ%JÐ%JÐ%Jr   ú(z,)ú ú<z: ú>)ÚjoinÚpitchesÚappendÚtyper	   )r#   ÚpitchStringsr   ÚjoinedPitchesÚoutÚpitchStrs         r   Ú__repr__zHorizontality.__repr__@   s’   € ØˆØð 	%ð 	%ˆAØ ŸIšIÐ%JÐ%JÀÄ	Ð%JÑ%JÔ%JÑJÔJˆMØ'�mÐ'Ð'Ð'ˆCØ×Ò Ñ$Ô$Ð$Ð$Ø—8’8˜LÑ)Ô)ˆØ5•4˜‘:”:Ô&Ð5Ð5¨(Ð5Ð5Ð5Ð5r   c                óf  — t          | ¦  «        dk     rdS t          d„ | D ¦   «         ¦  «        sdS | d         j        d         | d         j        d         | d         j        d         f}|d         |d         cxk     r|d         k     rn ndS |d         |d         cxk    r|d         k    rn ndS dS )z 
        Is true if the Horizontality contains a passing tone; currently defined as three tones in
        one direction.

        (TODO: better check)
        é   Fc              3  ó>   K  — | ]}t          |j        ¦  «        V — Œd S r&   ©r*   r5   r   s     r   r   z/Horizontality.hasPassingTone.<locals>.<genexpr>U   ó*   è è € Ð2Ð2¨•S˜œ‘^”^Ð2Ð2Ð2Ð2Ð2Ð2r   r   é   é   T)r*   r!   r5   ©r#   r5   s     r   ÚhasPassingTonezHorizontality.hasPassingToneK   sÚ   € õ ˆt‰9Œ9�qŠ=ˆ=Ø�5ÝÐ2Ð2¨TÐ2Ñ2Ô2Ñ2Ô2ð 	Ø�5à�ŒGŒO˜AÔØ�ŒGŒO˜AÔØ�ŒGŒO˜AÔð
ˆð
 �1Œ:˜ œ
Ð/Ð/Ò/Ð/ W¨Q¤ZÒ/Ð/Ð/Ð/Ð/Ø�4Ø�QŒZ˜' !œ*Ð1Ð1Ò1Ð1 w¨q¤zÒ1Ð1Ð1Ð1Ð1Ø�4Øˆur   c                óV  — t          | ¦  «        dk     rdS t          d„ | D ¦   «         ¦  «        sdS | d         j        d         | d         j        d         | d         j        d         f}|d         |d         k    r.t          |d         j        |d         j        z
  ¦  «        dk     rdS dS )zH
        Is true if the Horizontality contains a neighbor tone.
        r>   Fc              3  ó>   K  — | ]}t          |j        ¦  «        V — Œd S r&   r@   r   s     r   r   z0Horizontality.hasNeighborTone.<locals>.<genexpr>i   rA   r   r   rB   rC   T)r*   r!   r5   ÚabsÚpsrD   s     r   ÚhasNeighborTonezHorizontality.hasNeighborToneb   s²   € õ
 ˆt‰9Œ9�qŠ=ˆ=Ø�5ÝÐ2Ð2¨TÐ2Ñ2Ô2Ñ2Ô2ð 	Ø�5ð �ŒGŒO˜AÔØ�ŒGŒO˜AÔØ�ŒGŒO˜AÔð
ˆð
 �1Œ:˜ œÒ#Ð#Ý�7˜1”:”= 7¨1¤:¤=Ñ0Ñ1Ô1°AÒ5Ð5Ø�tØˆur   c                ó¤   — t          ¦   «         }| D ])}|                     t          |j        ¦  «        ¦  «         Œ*t	          |¦  «        dk    rdS dS )ze
        Is true if the Horizontality contains no motion (including enharmonic restatements)
        rB   TF)ÚsetÚaddr"   r5   r*   )r#   Ú	pitchSetsr   s      r   ÚhasNoMotionzHorizontality.hasNoMotionv   sV   € õ
 ‘E”Eˆ	Øð 	,ð 	,ˆAØ�MŠM�% ¤	Ñ*Ô*Ñ+Ô+Ð+Ð+Ýˆy‰>Œ>˜QÒÐØ�4Øˆur   r&   )r	   r
   r   Ú__doc__Ú	__slots__r$   r(   r+   r<   ÚpropertyrE   rJ   rO   r   r   r   r   r      s·   € € € € € ðð ð€Ið*ð *ð *ð *ð$ð $ð $ð#ð #ð #ð6ð 6ð 6ð ðð ñ „Xðð, ðð ñ „Xðð& ð	ð 	ñ „Xð	ð 	ð 	r   r   c                  ó   — e Zd ZdS )ÚTestNr   r   r   r   rT   rT   †   r   r   rT   r   Ú__main__)rP   Ú
__future__r   Úcollections.abcr   ÚunittestÚmusic21r   r   ÚEnvironmentÚenvironLocalÚTreeExceptionr   r   r    r   ÚTestCaserT   Ú
_DOC_ORDERr	   ÚmainTestr   r   r   ú<module>r`      s>  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à&ˆ{Ô& Ñ7Ô7€ð	ð 	ð 	ð 	ð 	˜\Ô7ñ 	ô 	ð 	ðað að að að a�K”OÔ,ñ aô að aðN	ð 	ð 	ð 	ð 	ˆ8Ôñ 	ô 	ð 	ð €
ð ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   