§
    ƒØj`*  ã                  óî   — d dl m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	  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 )é    )Úannotations)ÚIterableN)Úchord)Úcommon)Úenvironment)Úpitchzanalysis.transpositionc                  ó@   — e Zd ZdZddd„Zd„ Zd„ Zd„ Zd	„ Zd
„ Z	d„ Z
dS )ÚTranspositionCheckeraÖ  
    Given a list of pitches, checks for the number of distinct transpositions.

    >>> pList = [pitch.Pitch('C4'), pitch.Pitch('E4'), pitch.Pitch('G#4')]
    >>> tc = analysis.transposition.TranspositionChecker(pList)
    >>> tc.numDistinctTranspositions()
    4
    >>> allNormalOrderPitchTuples = tc.getPitchesOfDistinctTranspositions()
    >>> allNormalOrderPitchTuples
    [(<music21.pitch.Pitch C>, <music21.pitch.Pitch E>,
                                         <music21.pitch.Pitch G#>),
     (<music21.pitch.Pitch C#>, <music21.pitch.Pitch F>,
                                         <music21.pitch.Pitch A>),
     (<music21.pitch.Pitch D>, <music21.pitch.Pitch F#>,
                                         <music21.pitch.Pitch A#>),
     (<music21.pitch.Pitch E->, <music21.pitch.Pitch G>,
                                         <music21.pitch.Pitch B>)]
    >>> myChord = chord.Chord(['C', 'E-', 'F#', 'A'])
    >>> pList = myChord.pitches
    >>> tc = analysis.transposition.TranspositionChecker(pList)
    >>> allNormalOrderChords = tc.getChordsOfDistinctTranspositions()
    >>> allNormalOrderChords
    [<music21.chord.Chord C E- F# A>,
     <music21.chord.Chord C# E G A#>,
     <music21.chord.Chord D F G# B>]
    © ÚpitchesúIterable[pitch.Pitch]c                ó¦   — |st          d¦  «        ‚t          j        |¦  «        st          d¦  «        ‚|| _        g | _        g | _        g | _        d S )Nz&Must have at least one element in listzMust be a list or tuple)Ú	TypeErrorr   Ú
isIterabler   ÚallTranspositionsÚallNormalOrdersÚdistinctNormalOrders)Úselfr   s     ú“/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/analysis/transposition.pyÚ__init__zTranspositionChecker.__init__2   sj   € Øð 	ÝØ8ñô ð õ Ô  Ñ)Ô)ð 	7ÝÐ5Ñ6Ô6Ð6ð /6ˆŒØ')ˆÔØ%'ˆÔØ*,ˆÔ!Ð!Ð!ó    c                óÎ   — g }t          d¦  «        D ]K}g }| j        D ]*}|                     |                     |¦  «        ¦  «         Œ+|                     |¦  «         ŒL|| _        |S )aw  
        Gets all 12 transpositions (distinct or otherwise).

        >>> p = [pitch.Pitch('D#')]
        >>> tc = analysis.transposition.TranspositionChecker(p)
        >>> tc.getTranspositions()
        [[<music21.pitch.Pitch E->],
        [<music21.pitch.Pitch E>],
        [<music21.pitch.Pitch F>],
        [<music21.pitch.Pitch F#>],
        [<music21.pitch.Pitch G>],
        [<music21.pitch.Pitch G#>],
        [<music21.pitch.Pitch A>],
        [<music21.pitch.Pitch B->],
        [<music21.pitch.Pitch B>],
        [<music21.pitch.Pitch C>],
        [<music21.pitch.Pitch C#>],
        [<music21.pitch.Pitch D>]]
        é   )Úranger   ÚappendÚ	transposer   )r   r   ÚiÚthisTranspositionÚps        r   ÚgetTranspositionsz&TranspositionChecker.getTranspositionsA   s}   € ð* ÐÝ�r‘”ð 	8ð 	8ˆAØ "ÐØ”\ð 9ð 9�Ø!×(Ò(¨¯ª°Q©¬Ñ8Ô8Ð8Ð8Ø×$Ò$Ð%6Ñ7Ô7Ð7Ð7Ø!2ˆÔØ Ð r   c                óÆ   — | j         s|                      ¦   «          | j         }g }|D ]2}t          j        |¦  «        }|j        }|                     |¦  «         Œ3|| _        |S )a�  
        List the normal orders for all 12 transpositions

        >>> pList = [pitch.Pitch('C4'), pitch.Pitch('E4'), pitch.Pitch('G#4')]
        >>> tc = analysis.transposition.TranspositionChecker(pList)
        >>> tc.listNormalOrders()
        [[0, 4, 8], [1, 5, 9], [2, 6, 10], [3, 7, 11],
         [0, 4, 8], [1, 5, 9], [2, 6, 10], [3, 7, 11],
         [0, 4, 8], [1, 5, 9], [2, 6, 10], [3, 7, 11]]
        )r   r    r   ÚChordÚnormalOrderr   r   )r   r   r   r   ÚcÚthisNormalOrders         r   ÚlistNormalOrdersz%TranspositionChecker.listNormalOrders_   s{   € ð Ô%ð 	%Ø×"Ò"Ñ$Ô$Ð$Ø Ô2ÐØˆØ!2ð 	4ð 	4Ðå”Ð-Ñ.Ô.ˆAØœmˆOØ×"Ò" ?Ñ3Ô3Ð3Ð3Ø.ˆÔØÐr   c                ó’   ‡— | j         s|                      ¦   «          | j         }t          ¦   «         Šˆfd„|D ¦   «         }|| _        |S )a=  
        List the distinct normal orders (without duplication).

        >>> pList = [pitch.Pitch('C4'), pitch.Pitch('E4'), pitch.Pitch('G#4')]
        >>> tc = analysis.transposition.TranspositionChecker(pList)
        >>> tc.listDistinctNormalOrders()
        [[0, 4, 8], [1, 5, 9], [2, 6, 10], [3, 7, 11]]
        c                óz   •— g | ]7}t          |¦  «        ‰v °‰                     t          |¦  «        ¦  «        °5|‘Œ8S r   )ÚtupleÚadd)Ú.0ÚxÚseens     €r   ú
<listcomp>zATranspositionChecker.listDistinctNormalOrders.<locals>.<listcomp>ƒ   sM   ø€ ð  Qð  Qð  Q aÝ(-¨a©¬°DÐ(8Ð(8¸D¿HºHÅUÈ1ÁXÄXÑ<NÔ<NÐ(8ð !"Ø(8Ð(8Ð(8r   )r   r&   Úsetr   )r   r   r   r-   s      @r   ÚlistDistinctNormalOrdersz-TranspositionChecker.listDistinctNormalOrdersv   sp   ø€ ð Ô#ð 	$Ø×!Ò!Ñ#Ô#Ð#ØÔ.ˆÝ‰uŒuˆð Qð  Qð  Qð  Q¨?ð  Qñ  Qô  QÐà$8ˆÔ!Ø#Ð#r   c                ó`   — | j         s|                      ¦   «          t          | j         ¦  «        S )a  
        Gives the number of distinct transpositions (normal orders).

        >>> pList = [pitch.Pitch('C4'), pitch.Pitch('E4'), pitch.Pitch('G#4')]
        >>> tc = analysis.transposition.TranspositionChecker(pList)
        >>> tc.numDistinctTranspositions()
        4
        )r   r0   Úlen)r   s    r   ÚnumDistinctTranspositionsz.TranspositionChecker.numDistinctTranspositionsˆ   s2   € ð Ô(ð 	,Ø×)Ò)Ñ+Ô+Ð+Ý�4Ô,Ñ-Ô-Ð-r   c                óª   — | j         s|                      ¦   «          | j         }g }|D ]+}t          j        |¦  «        }|                     |¦  «         Œ,|S )a´  
        Outputs chords for each distinct transposition (normal order).

        >>> pList = [pitch.Pitch('C4'), pitch.Pitch('E4'), pitch.Pitch('G#4')]
        >>> tc = analysis.transposition.TranspositionChecker(pList)
        >>> tc.getChordsOfDistinctTranspositions()
        [<music21.chord.Chord C E G#>,
         <music21.chord.Chord C# F A>,
         <music21.chord.Chord D F# A#>,
         <music21.chord.Chord E- G B>]
        )r   r0   r   r"   r   )r   r   ÚallNormalOrderChordsr%   ÚthisNormalOrderChords        r   Ú!getChordsOfDistinctTranspositionsz6TranspositionChecker.getChordsOfDistinctTranspositions•   sm   € ð Ô(ð 	,Ø×)Ò)Ñ+Ô+Ð+Ø#Ô8ÐØ!ÐØ3ð 	>ð 	>ˆOÝ#(¤;¨Ñ#?Ô#?Ð Ø ×'Ò'Ð(<Ñ=Ô=Ð=Ð=Ø#Ð#r   c                óF   — |                       ¦   «         }d„ |D ¦   «         }|S )a{  
        Outputs pitch tuples for each distinct transposition (normal order).

        >>> pList = [pitch.Pitch('C4'), pitch.Pitch('E4'), pitch.Pitch('G#4')]
        >>> tc = analysis.transposition.TranspositionChecker(pList)
        >>> tc.getPitchesOfDistinctTranspositions()
        [(<music21.pitch.Pitch C>, <music21.pitch.Pitch E>, <music21.pitch.Pitch G#>),
         (<music21.pitch.Pitch C#>, <music21.pitch.Pitch F>, <music21.pitch.Pitch A>),
         (<music21.pitch.Pitch D>, <music21.pitch.Pitch F#>, <music21.pitch.Pitch A#>),
         (<music21.pitch.Pitch E->, <music21.pitch.Pitch G>, <music21.pitch.Pitch B>)]
        c                ó   — g | ]	}|j         ‘Œ
S r   )r   )r+   r$   s     r   r.   zKTranspositionChecker.getPitchesOfDistinctTranspositions.<locals>.<listcomp>·   s   € Ð$?Ð$?Ð$?°1 Q¤YÐ$?Ð$?Ð$?r   )r7   )r   ÚchordsÚallNormalOrderPitchTupless      r   Ú"getPitchesOfDistinctTranspositionsz7TranspositionChecker.getPitchesOfDistinctTranspositionsª   s/   € ð ×7Ò7Ñ9Ô9ˆØ$?Ð$?¸Ð$?Ñ$?Ô$?Ð!Ø(Ð(r   N)r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r&   r0   r3   r7   r<   r   r   r   r
   r
      s‘   € € € € € ðð ð4-ð -ð -ð -ð -ð!ð !ð !ð<ð ð ð.$ð $ð $ð$.ð .ð .ð$ð $ð $ð*)ð )ð )ð )ð )r   r
   c                  ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestc                óB   — ddl m}  || t          ¦   «         ¦  «         d S )Nr   )ÚtestCopyAll)Úmusic21.test.commonTestrD   Úglobals)r   rD   s     r   ÚtestCopyAndDeepcopyzTest.testCopyAndDeepcopy¼   s0   € Ø7Ð7Ð7Ð7Ð7Ð7Øˆ�D�'™)œ)Ñ$Ô$Ð$Ð$Ð$r   c                óò   — t          j        d¦  «        g}t          |¦  «        }|                      |j        |¦  «         t          |j        ¦  «        }|                      |t          |¦  «        ¦  «         d S )NúD#)r   ÚPitchr
   ÚassertEqualr   r2   )r   r   ÚtcÚnumberOfPitchesInTcs       r   Ú!testConstructTranspositionCheckerz&Test.testConstructTranspositionCheckerÀ   sj   € ÝŒ[˜ÑÔÐˆÝ! !Ñ$Ô$ˆà×Ò˜œ QÑ'Ô'Ð'Ý! "¤*™oœoÐØ×ÒÐ,­c°!©f¬fÑ5Ô5Ð5Ð5Ð5r   c                óÞ  — t          j        d¦  «        g}t          |¦  «        }|                     ¦   «         }|                      t          |¦  «        d¦  «         |                      |d         d         t           j        ¦  «         |                      |d         d         j        |d         j        ¦  «         |                      |d         d         j        |d         j        dz   ¦  «         t          j        d¦  «        t          j        d¦  «        g}t          |¦  «        }|                     ¦   «         }|                      t          |¦  «        d¦  «         |                      |d         d         t           j        ¦  «         |                      |d         d         j        |d         j        ¦  «         |                      |d         d         j        |d         j        ¦  «         d S )NrI   r   r   é   ÚF)r   rJ   r
   r    rK   r2   ÚassertIsInstanceÚmidi)r   r   rL   r   s       r   ÚtestTranspositionszTest.testTranspositionsÈ   s¦  € ÝŒ[˜ÑÔÐˆÝ! !Ñ$Ô$ˆØ×0Ò0Ñ2Ô2Ðà×Ò�Ð.Ñ/Ô/°Ñ4Ô4Ð4Ø×ÒÐ/°Ô2°1Ô5µu´{ÑCÔCÐCØ×ÒÐ*¨1Ô-¨aÔ0Ô5°q¸´t´yÑAÔAÐAØ×ÒÐ*¨1Ô-¨aÔ0Ô5°q¸´t´yÀ1±}ÑEÔEÐEåŒ[˜ÑÔ¥¤¨CÑ 0Ô 0Ð1ˆÝ! !Ñ$Ô$ˆØ×0Ò0Ñ2Ô2Ðà×Ò�Ð.Ñ/Ô/°Ñ4Ô4Ð4Ø×ÒÐ/°Ô2°1Ô5µu´{ÑCÔCÐCØ×ÒÐ*¨1Ô-¨aÔ0Ô5°q¸´t´yÑAÔAÐAØ×ÒÐ*¨1Ô-¨aÔ0Ô5°q¸´t´yÑAÔAÐAÐAÐAr   c                óL  — t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g}t          |¦  «        }|                     ¦   «         }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         d S )NÚC4ÚE4úG#4r   r   é   )r   rJ   r
   r&   rK   r2   Ú
assertLess)r   ÚpListrL   ÚnormalOrderss       r   ÚtestNormalOrderszTest.testNormalOrdersÛ   s‹   € Ý”˜TÑ"Ô"¥E¤K°Ñ$5Ô$5µu´{À5Ñ7IÔ7IÐJˆÝ! %Ñ(Ô(ˆØ×*Ò*Ñ,Ô,ˆà×Ò�˜\Ñ*Ô*¨BÑ/Ô/Ð/Ø�Š˜ Qœ¨Ô*¨BÑ/Ô/Ð/Ð/Ð/r   c                óÎ  — t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g}t          |¦  «        }|                     ¦   «         }|                     ¦   «         }|                      t          |¦  «        d¦  «         |                      |d¦  «         |                      |t          ¦  «         |                      |d         g d¢¦  «         d S )NrV   rW   rX   é   r   )r   r_   é   )	r   rJ   r
   r0   r3   rK   r2   rR   Úlist)r   r[   rL   ÚallDistinctNormalOrdersÚlengthDistinctNormalOrderss        r   ÚtestDistinctNormalOrderszTest.testDistinctNormalOrdersã   sÐ   € Ý”˜TÑ"Ô"¥E¤K°Ñ$5Ô$5µu´{À5Ñ7IÔ7IÐJˆÝ! %Ñ(Ô(ˆØ"$×"=Ò"=Ñ"?Ô"?Ðà%'×%AÒ%AÑ%CÔ%CÐ"à×Ò�Ð4Ñ5Ô5°qÑ9Ô9Ð9Ø×ÒÐ3°QÑ7Ô7Ð7Ø×ÒÐ5µtÑ<Ô<Ð<Ø×ÒÐ0°Ô3°Y°Y°YÑ?Ô?Ð?Ð?Ð?r   c                ó¶  — t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g}t          |¦  «        }|                     ¦   «         }|                      t          |¦  «        d¦  «         |                      |d         t          j        ¦  «         |                      |d         j	        d         t           j        ¦  «         d S ©NrV   rW   rX   r_   r   )
r   rJ   r
   r7   rK   r2   rR   r   r"   r   )r   r[   rL   r5   s       r   ÚtestNormalOrderChordszTest.testNormalOrderChordsï   s´   € Ý”˜TÑ"Ô"¥E¤K°Ñ$5Ô$5µu´{À5Ñ7IÔ7IÐJˆÝ! %Ñ(Ô(ˆà!×CÒCÑEÔEÐà×Ò�Ð1Ñ2Ô2°AÑ6Ô6Ð6à×ÒÐ2°1Ô5µu´{ÑCÔCÐCØ×ÒÐ2°1Ô5Ô=¸aÔ@Å%Ä+ÑNÔNÐNÐNÐNr   c                ó¢  — t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g}t          |¦  «        }|                     ¦   «         }|                      t          |¦  «        d¦  «         |                      |d         t          ¦  «         |                      |d         d         t           j        ¦  «         d S rf   )r   rJ   r
   r<   rK   r2   rR   r)   )r   r[   rL   r;   s       r   ÚtestNormalOrdersPitcheszTest.testNormalOrdersPitchesû   s¯   € Ý”˜TÑ"Ô"¥E¤K°Ñ$5Ô$5µu´{À5Ñ7IÔ7IÐJˆÝ! %Ñ(Ô(ˆà$&×$IÒ$IÑ$KÔ$KÐ!à×Ò�Ð6Ñ7Ô7¸Ñ;Ô;Ð;à×ÒÐ7¸Ô:½EÑBÔBÐBØ×ÒÐ7¸Ô:¸1Ô=½u¼{ÑKÔKÐKÐKÐKr   N)
r=   r>   r?   rG   rN   rT   r]   rd   rg   ri   r   r   r   rB   rB   »   s‹   € € € € € ð%ð %ð %ð6ð 6ð 6ðBð Bð Bð&0ð 0ð 0ð
@ð 
@ð 
@ð	Oð 	Oð 	Oð	Lð 	Lð 	Lð 	Lð 	Lr   rB   Ú__main__)Ú
__future__r   Úcollections.abcr   ÚunittestÚmusic21r   r   r   r   ÚEnvironmentÚenvironLocalr
   ÚTestCaserB   r=   ÚmainTestr   r   r   ú<module>rs      s5  ðð #Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à&ˆ{Ô&Ð'?Ñ@Ô@€ða)ð a)ð a)ð a)ð a)ñ a)ô a)ð a)ðHILð ILð ILð ILð ILˆ8Ôñ ILô ILð ILð\ ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   