§
    ƒØj|1  ã                  óÜ  — d Z 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	  G d	„ d
ej
        ¦  «        Z G d„ de	j        ¦  «        Z G d„ de	j        ¦  «        Z G d„ d¦  «        Z G d„ dej        e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ dej        ¦  «        Zedk    rddlZ ej        e¦  «         dS dS )z}
Music21 representation of FretNote and FretBoard objects.

TODO:
Chord from Figure
Chord from FretBoard Object with tuning.
é    )ÚannotationsN)Úcommon)Úexceptions21)Úharmony)Úpitch)Úprebasec                  ó   — e Zd ZdS )ÚTablatureExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú†/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/tablature.pyr
   r
      s   € € € € € Ø€Dr   r
   c                  ó(   — e Zd ZdZ	 	 	 d	d
d„Zd„ ZdS )ÚFretNotea¹  
    A FretNote represents a note on a Fretboard, where each string should
    be fingered (or not).

    >>> fn = tablature.FretNote(3, 4, 1)
    >>> fn
    <music21.tablature.FretNote 3rd string, 4th fret, 1st finger>

    >>> fn.string
    3
    >>> fn.fret
    4
    >>> fn.fingering
    1
    >>> fn.displayFingerNumber
    True

    >>> fnUnknownFinger = tablature.FretNote(1, 1)
    >>> fnUnknownFinger.fingering is None
    True
    NÚstringú
int | NoneÚfretÚ	fingeringc                ó>   — || _         || _        || _        d| _        d S )NT)r   r   r   ÚdisplayFingerNumber)Úselfr   r   r   s       r   Ú__init__zFretNote.__init__6   s'   € ð
 !'ˆŒØ"ˆŒ	Ø#,ˆŒØ)-ˆÔ Ð Ð r   c                ó.  — d„ }| j         � || j         ¦  «        › d�}nd}| j        � || j        ¦  «        › d�}nd}| j        � || j        ¦  «        › d�}nd}g }|||fD ]}|dk    r|                     |¦  «         Œd                     |¦  «        }|S )aA  
        Defines the representation of a FretNote object under music21 standards.

        >>> fn = tablature.FretNote(4, 2, 1)
        >>> fn
        <music21.tablature.FretNote 4th string, 2nd fret, 1st finger>

        >>> fn2 = tablature.FretNote(3, 2)
        >>> fn2
        <music21.tablature.FretNote 3rd string, 2nd fret>

        >>> fn3 = tablature.FretNote(fret=2, fingering=3)
        >>> fn3
        <music21.tablature.FretNote 2nd fret, 3rd finger>

        >>> emptyNote = tablature.FretNote()
        >>> emptyNote
        <music21.tablature.FretNote>
        c                ó2   — | › t          j        | ¦  «        › �S ©N)r   ÚordinalAbbreviation)Úxs    r   Úabbrz$FretNote._reprInternal.<locals>.abbrT   s   € ØÐ8�Ô3°AÑ6Ô6Ð8Ð8Ð8r   Nz stringÚ z fretz fingerz, )r   r   r   ÚappendÚjoin)r   r    Ú
stringReprÚfretReprÚfingeringReprÚnonEmptyReprÚthisReprÚfullReprs           r   Ú_reprInternalzFretNote._reprInternal@   sÛ   € ð(	9ð 	9ð 	9ð Œ;Ð"Ø ˜D ¤Ñ-Ô-Ð6Ð6Ð6ˆJˆJàˆJàŒ9Ð Ø˜$˜tœy™/œ/Ð0Ð0Ð0ˆHˆHàˆHàŒ>Ð%Ø#˜t D¤NÑ3Ô3Ð<Ð<Ð<ˆMˆMàˆMàˆØ" H¨mÐ;ð 	.ð 	.ˆHØ˜2Š~ˆ~Ø×#Ò# HÑ-Ô-Ð-øà—9’9˜\Ñ*Ô*ˆØˆr   )NNN)r   r   r   r   r   r   )r   r   r   Ú__doc__r   r*   r   r   r   r   r       sQ   € € € € € ðð ð, "&ØØ"ð.ð .ð .ð .ð .ð,ð ,ð ,ð ,ð ,r   r   c                  ó<   — e Zd ZdZ	 	 	 ddd
„Zd„ Zd„ Zd„ Zdd„ZdS )Ú	FretBoarda  
    A FretBoard represents a displayed fretboard (i.e. used in chord symbols).
    To be displayed, a fretboard requires a tuning system, defined by the fretted instrument
    classes defined.

    >>> fn1 = tablature.FretNote(string=3, fret=2, fingering=1)
    >>> fn2 = tablature.FretNote(string=2, fret=3, fingering=3)
    >>> fn3 = tablature.FretNote(string=1, fret=2, fingering=2)
    >>> fb = tablature.FretBoard(6, fretNotes=[fn1, fn2, fn3], displayFrets=5)
    >>> fb.numStrings
    6
    >>> fb
    <music21.tablature.FretBoard 6 strings, 3 notes, 5 frets>
    >>> len(fb.fretNotes)
    3
    >>> fb.fretNotes[0]
    <music21.tablature.FretNote 3rd string, 2nd fret, 1st finger>

    >>> fb.getFretNoteByString(2)
    <music21.tablature.FretNote 2nd string, 3rd fret, 3rd finger>
    é   Né   Ú
numStringsÚintÚ	fretNotesúlist[FretNote] | NoneÚdisplayFretsc                óB   — || _         |pg | _        || _        g | _        d S r   )r0   r2   r4   Útuning)r   r0   r2   r4   s       r   r   zFretBoard.__init__†   s)   € ð
  *ˆŒØ)2¨°bˆŒØ(ˆÔà)+ˆŒˆˆr   c                óP   — | j         › dt          | j        ¦  «        › d| j        › d�S )ay  
        >>> fn3 = tablature.FretNote(string=6, fret=1, fingering=1)
        >>> fn2 = tablature.FretNote(string=4, fret=2, fingering=2)
        >>> fn1 = tablature.FretNote(string=2, fret=4, fingering=4)
        >>> fb = tablature.FretBoard(6, fretNotes=[fn3, fn2, fn1], displayFrets=4)
        >>> fb
        <music21.tablature.FretBoard 6 strings, 3 notes, 4 frets>
        z
 strings, z notes, z frets)r0   Úlenr2   r4   ©r   s    r   r*   zFretBoard._reprInternal‘   s2   € ð ”/ÐcÐc­S°´Ñ-@Ô-@ÐcÐcÈ$ÔJ[ÐcÐcÐcÐcr   c                ó–   — g }t          | j        dd¦  «        D ]/}|                      |¦  «        }|€Œ|                     |¦  «         Œ0|S )aÈ  
        Returns a list of FretNotes in lowest to highest string order.

        >>> firstNote = tablature.FretNote(string=2, fret=3, fingering=4)
        >>> secondNote = tablature.FretNote(string=3, fret=3, fingering=3)
        >>> thirdNote = tablature.FretNote(string=1, fret=3, fingering=3)
        >>> myFretBoard = tablature.FretBoard(6, fretNotes=[firstNote, secondNote, thirdNote])
        >>> for thisFretNote in myFretBoard.fretNotesLowestFirst():
        ...    print(thisFretNote)
        <music21.tablature.FretNote 3rd string, 3rd fret, 3rd finger>
        <music21.tablature.FretNote 2nd string, 3rd fret, 4th finger>
        <music21.tablature.FretNote 1st string, 3rd fret, 3rd finger>
        r   éÿÿÿÿ)Úranger0   ÚgetFretNoteByStringr"   )r   ÚallFretNotesÚstringNumberÚthisFretNotes       r   ÚfretNotesLowestFirstzFretBoard.fretNotesLowestFirstœ   s_   € ð ˆå! $¤/°1°bÑ9Ô9ð 	.ð 	.ˆLØ×3Ò3°LÑAÔAˆLØÐ#Øà×Ò Ñ-Ô-Ð-Ð-àÐr   c                ó8   — | j         D ]}||j        k    r|c S ŒdS )ap  
        Returns FretNote object on a given string or None if there are none.

        >>> firstNote = tablature.FretNote(string=6, fret=3, fingering=4)
        >>> secondNote = tablature.FretNote(string=2, fret=3, fingering=3)
        >>> myFretBoard = tablature.FretBoard(6, fretNotes=[firstNote, secondNote])
        >>> myFretBoard.getFretNoteByString(6)
        <music21.tablature.FretNote 6th string, 3rd fret, 4th finger>

        >>> myFretBoard.getFretNoteByString(2)
        <music21.tablature.FretNote 2nd string, 3rd fret, 3rd finger>

        >>> myFretBoard.getFretNoteByString(9) is None
        True
        N)r2   r   )r   ÚrequestedStringr@   s      r   r=   zFretBoard.getFretNoteByString¶   s;   € ð  !œNð 	$ð 	$ˆLØ ,Ô"5Ò5Ð5Ø#Ð#Ð#Ð#ð 6ð ˆtr   Úreturnúlist[None | pitch.Pitch]c                ó`  — t          | j        ¦  «        | j        k    r-t          dt          | j        ¦  «        › d| j        › d�¦  «        ‚dg| j        z  }| j        s|S | j        D ]G}|j        pddz  }| j        |         }|j        }||j        pdz   }t          j	        |¦  «        }|||<   ŒH|S )aø  
        Returns a list of all the pitches (or None for each) given the FretNote information. This
        requires a tuning to be set.

        >>> firstNote = tablature.FretNote(string=4, fret=3, fingering=3)
        >>> secondNote = tablature.FretNote(string=2, fret=1, fingering=1)
        >>> gfb = tablature.GuitarFretBoard(fretNotes=[firstNote, secondNote])
        >>> gfb.getPitches()
        [None, None, <music21.pitch.Pitch F3>, None, <music21.pitch.Pitch C4>, None]

        What if the User provides an empty FretBoard?
        >>> gfb2 = tablature.GuitarFretBoard(fretNotes=[])
        >>> gfb2.getPitches()
        [None, None, None, None, None, None]

        Works for other stringed instruments, as long as the tuning is included (see below).

        >>> tablature.UkeleleFretBoard().numStrings
        4
        >>> uke = tablature.UkeleleFretBoard(fretNotes=[firstNote, secondNote])
        >>> uke.getPitches()
        [<music21.pitch.Pitch B-4>, None, <music21.pitch.Pitch F4>, None]
        z$Tuning must be set first, tuned for z notes, on a z string instrumentNr   r;   )
r8   r6   r0   r
   r2   r   Úpsr   r   ÚPitch)r   Ú	pitchListr@   ÚpitchListPositionÚtuningPitchÚtuningPitchAsPsÚactualPitchÚdisplayPitchs           r   Ú
getPitcheszFretBoard.getPitchesÌ   sê   € õ0 ˆtŒ{ÑÔ˜tœÒ.Ð.Ý$ð7Ý�t”{Ñ#Ô#ð7ð 7à”?ð7ð 7ð 7ñô ð ð .2¨F°T´_Ñ,Dˆ	àŒ~ð 	ØÐà œNð 	8ð 	8ˆLØ!-Ô!4Ð!9¸¸RÑ ?Ðàœ+Ð&7Ô8ˆKØ%0¤^ˆOØ!0°LÔ4EÐ4JÈÑ!KˆKÝ œ; {Ñ3Ô3ˆLà+7ˆIÐ'Ñ(Ð(àÐr   )r.   Nr/   )r0   r1   r2   r3   r4   r1   )rD   rE   )	r   r   r   r+   r   r*   rA   r=   rO   r   r   r   r-   r-   o   s†   € € € € € ðð ð. !"Ø)-Øð	,ð 	,ð 	,ð 	,ð 	,ð	dð 	dð 	dðð ð ð4ð ð ð,.ð .ð .ð .ð .ð .r   r-   c                  ó   — e Zd ZdZdd„ZdS )Ú	FirstFretzp
    FirstFretInfo returns the information regarding the first fret utilized in a
    given chord position.
    Úrightc                ó"   — || _         || _        d S r   )ÚfretNumÚlocation)r   rT   rU   s      r   r   zFirstFret.__init__  s   € ØˆŒØ ˆŒˆˆr   N)rR   )r   r   r   r+   r   r   r   r   rQ   rQ   ý   s2   € € € € € ðð ð
!ð !ð !ð !ð !ð !r   rQ   c                  ó    — e Zd ZdZdd„Zd„ ZdS )ÚChordWithFretBoarda¯  
    Music21Object subclass that combines a ChordSymbol with a FretBoard.
    Its tuning must be set.

    >>> fn4 = tablature.FretNote(string=4, fret=0)
    >>> fn3 = tablature.FretNote(string=3, fret=2, fingering=2)
    >>> fn2 = tablature.FretNote(string=2, fret=3, fingering=3)
    >>> fn1 = tablature.FretNote(string=1, fret=2, fingering=4)
    >>> cwf = tablature.ChordWithFretBoard('Dm', fretNotes=[fn1, fn2, fn3, fn4])
    Nr.   r/   c                ót   — t          j        j        | fd|i|¤Ž t                               | |||¬¦  «         d S )NÚfigure)r0   r2   r4   )r   ÚChordSymbolr   r-   )r   rY   r0   r2   r4   Úkeywordss         r   r   zChordWithFretBoard.__init__  sW   € ÝÔÔ$ TÐEÐE°&ÐE¸HÐEÐEÐEõ
 	×Ò˜4Ø&0Ø%.Ø(4ð 	ñ 	6ô 	6ð 	6ð 	6ð 	6r   c                ó   — dS )z†
        TODO:
        Given a chord with fret Figure, getFretNotesFromFigure returns each FretNote object
        within it.
        Nr   r9   s    r   ÚgetFretNotesFromFigurez)ChordWithFretBoard.getFretNotesFromFigure  s	   € ð ˆtr   )Nr.   Nr/   )r   r   r   r+   r   r]   r   r   r   rW   rW     sA   € € € € € ð	ð 	ð	6ð 	6ð 	6ð 	6ðð ð ð ð r   rW   c                  ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚGuitarFretBoardz6
    A six-string fretboard tuned to E A D G B E.
    Nr/   c                óD  •— d}t          ¦   «                              |||¦  «         t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g| _        d S )Nr.   ÚE2ÚA2ÚD3ÚG3ÚB3ÚE4©Úsuperr   r   rH   r6   ©r   r2   r4   r0   Ú	__class__s       €r   r   zGuitarFretBoard.__init__4  s|   ø€ Øˆ
Ý‰Œ×Ò˜ Y°Ñ=Ô=Ð=å”{ 4Ñ(Ô(­%¬+°dÑ*;Ô*;½U¼[ÈÑ=NÔ=NÝ”{ 4Ñ(Ô(­%¬+°dÑ*;Ô*;½U¼[ÈÑ=NÔ=NðPˆŒˆˆr   ©Nr/   ©r   r   r   r+   r   Ú__classcell__©rj   s   @r   r_   r_   /  sQ   ø€ € € € € ðð ðPð Pð Pð Pð Pð Pð Pð Pð Pð Pr   r_   c                  ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚUkeleleFretBoardz2
    A four-string fretboard tuned to G C E A
    Nr/   c                óø   •— d}t          ¦   «                              |||¦  «         t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g| _        d S )Nr/   ÚG4ÚC4rf   ÚA4rg   ri   s       €r   r   zUkeleleFretBoard.__init__A  óc   ø€ Øˆ
Ý‰Œ×Ò˜ Y°Ñ=Ô=Ð=å”{ 4Ñ(Ô(­%¬+°dÑ*;Ô*;½U¼[ÈÑ=NÔ=NÕPUÔP[Ð\`ÑPaÔPaÐbˆŒˆˆr   rk   rl   rn   s   @r   rp   rp   <  óQ   ø€ € € € € ðð ðcð cð cð cð cð cð cð cð cð cr   rp   c                  ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚBassGuitarFretBoardz2
    A four-string fretboard tuned to E A D G
    Nr/   c                óø   •— d}t          ¦   «                              |||¦  «         t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g| _        d S )Nr/   ÚE1ÚA1ÚD2ÚG2rg   ri   s       €r   r   zBassGuitarFretBoard.__init__M  ru   r   rk   rl   rn   s   @r   rx   rx   H  rv   r   rx   c                  ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚMandolinFretBoardz2
    A four-string fretboard tuned to G D A E
    Nr/   c                óø   •— d}t          ¦   «                              |||¦  «         t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g| _        d S )Nr/   rd   ÚD4rt   ÚE5rg   ri   s       €r   r   zMandolinFretBoard.__init__Y  ru   r   rk   rl   rn   s   @r   r   r   T  rv   r   r   c                  ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestc                ót   — t          ddd¦  «        }|j        |j        g}|                      |ddg¦  «         d S )Nr/   é   é   )r   r   r   ÚassertEqual)r   ÚfÚstringAndFretInfos      r   ÚtestFretNoteStringzTest.testFretNoteStringc  sC   € Ý�Q˜˜1ÑÔˆàœX q¤vÐ.Ðà×ÒÐ*¨Q°¨FÑ3Ô3Ð3Ð3Ð3r   c                óT   — |                       t          ¦   «         j        d ¦  «         d S r   )rˆ   r   r   r9   s    r   ÚtestStupidFretNotezTest.testStupidFretNotej  s%   € Ø×Ò�™œÔ*¨DÑ1Ô1Ð1Ð1Ð1r   c                óˆ   — ddl m} |                     dd¦  «        }d}|                      t	          |¦  «        |¦  «         d S )Nr   )Ú	tablaturer.   é…   z3<music21.tablature.FretNote 6th string, 133rd fret>)Úmusic21r�   r   rˆ   Úrepr)r   r�   ÚweirdFretNoteÚexpectedReprs       r   ÚtestFretNoteWeirdReprzTest.testFretNoteWeirdReprm  sR   € Ø%Ð%Ð%Ð%Ð%Ð%Ø!×*Ò*¨1¨cÑ2Ô2ˆàLˆà×Ò�˜mÑ,Ô,¨lÑ;Ô;Ð;Ð;Ð;r   c                ó  — t          ddd¦  «        }t          ddd¦  «        }t          d||g¬¦  «        }g }|                     ¦   «         D ]}|                     |j        ¦  «         Œ|                      |ddg¦  «         d S )Nr†   r‡   r.   )r2   )r   r-   rA   r"   r   rˆ   )r   Ú	fretNote1Ú	fretNote2ÚmyFretBoardÚ
stringListÚthisNotes         r   ÚtestFretBoardLowestFirstzTest.testFretBoardLowestFirstu  s”   € Ý˜Q  1Ñ%Ô%ˆ	Ý˜Q  1Ñ%Ô%ˆ	å ¨i¸Ð-CÐDÑDÔDˆàˆ
à#×8Ò8Ñ:Ô:ð 	/ð 	/ˆHØ×Ò˜hœoÑ.Ô.Ð.Ð.à×Ò˜ a¨ VÑ,Ô,Ð,Ð,Ð,r   N)r   r   r   r‹   r�   r•   rœ   r   r   r   r„   r„   a  sP   € € € € € ð4ð 4ð 4ð2ð 2ð 2ð<ð <ð <ð-ð -ð -ð -ð -r   r„   Ú__main__)r+   Ú
__future__r   Úunittestr‘   r   r   r   r   r   ÚMusic21Exceptionr
   ÚProtoM21Objectr   r-   rQ   rZ   rW   r_   rp   rx   r   ÚTestCaser„   r   ÚmainTestr   r   r   ú<module>r¤      s¤  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	˜Ô6ñ 	ô 	ð 	ðLð Lð Lð Lð LˆwÔ%ñ Lô Lð Lð^Kð Kð Kð Kð K�Ô&ñ Kô Kð Kð\!ð !ð !ð !ð !ñ !ô !ð !ðð ð ð ð ˜Ô,¨iñ ô ð ðN
Pð 
Pð 
Pð 
Pð 
P�iñ 
Pô 
Pð 
Pð	cð 	cð 	cð 	cð 	c�yñ 	cô 	cð 	cð	cð 	cð 	cð 	cð 	c˜)ñ 	cô 	cð 	cð	cð 	cð 	cð 	cð 	c˜	ñ 	cô 	cð 	cð-ð -ð -ð -ð -ˆ8Ôñ -ô -ð -ðD ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   