§
    ƒØ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 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 G d„ dej        ¦  «        Zi ddddg d¢f“ddddg d¢f“ddddg d¢f“ddddg d¢f“d ddd!g d"¢f“d#dd$d%g d&¢f“d'dd(d)g d*¢f“d+d,d-d.g d/¢f“d0dd1d2g d3¢f“d4d,d5d6g d7¢f“d8dd9d:g d;¢f“d<dd=d>g d?¢f“d@dddAg dB¢f“dCddDdEg dF¢f“dGddHdIg dJ¢f“dKddLdMg dN¢f“dOdddPg dQ¢f“i dRddSd)g dT¢f“dUddVdWg dX¢f“dYddZd[g d\¢f“d]dd^d_g d`¢f“daddbdcg dd¢f“dedddfg dg¢f“dhddidjg dk¢f“dlddidmg dn¢f“doddidpg dq¢f“drddsdtg du¢f“dvddidwg dx¢f“dydddzg d{¢f“d|d,dd}g d~¢f“ddd€d�g d‚¢f“dƒdd„d…g d†¢f“d‡dddˆg d‰¢f“dŠdd‹dŒg d�¢f“¥i dŽdd�d�g d�¢f“d‘dd’d“g d”¢f“d•dd–d—g d˜¢f“d™ddšd›g dœ¢f“d�ddždŸg d ¢f“d¡d,dd¢g d£¢f“d¤dd¥d¦g d§¢f“d¨d,dd©g dª¢f“d«dd¬d­g d®¢f“d¯dd°d±g d²¢f“d³dd´dµg d¶¢f“d·ddd¸g d¹¢f“dºddsd»g d¼¢f“d½dd¾d¿g dÀ¢f“dÁddÂdÃg dÄ¢f“dÅddÆdÇg dÈ¢f“dÉddÊdËg dÌ¢f“¥i dÍddšdÎg dÏ¢f“dÐdddÑg dÒ¢f“dÓd,ddÔg dÕ¢f“dÖd,dd×g dØ¢f“dÙddÚdÛg dÜ¢f“dÝddÞdßg dà¢f“dáddâdãg dä¢f“dåddædçg dè¢f“déddsdêg dë¢f“dìddídîg dï¢f“dðddñdòg dó¢f“dôddõdög d÷¢f“død,ddùg dú¢f“dûddüdýg dþ¢f“dÿdd°�d g �d¢f“�ddd¬�dg �d¢f“�dd,d�dg �d¢f“¥d�d�d	g �d
¢fd�d�dg �d¢fd�d�dg �d¢f�dœ¥Z G �d„ �dej        ¦  «        Z G �d„ �de¦  «        Z G �d„ �de¦  «        Z�d„ Z�d„ Z�d"�d„Z G �d„ �d ej        ¦  «        ZeeeeeeegZe�d!k    rddlZ ej        e¦  «         dS dS (#  a  
This module defines objects for defining and manipulating structures
common to serial and/or twelve-tone music,
including :class:`~music21.serial.ToneRow` subclasses.

Serial searching methods that were previously here have been moved to
:mod:`~music21.search.serial`.
é    )ÚannotationsN)Úchord)Úenvironment)Úexceptions21)Únote©Úpitch)ÚstreamÚserialc                  ó   — e Zd ZdS )ÚSerialExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    úƒ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/serial.pyr   r   #   s   € € € € € Ø€Dr   r   c                  ó(   ‡ — e Zd ZdZd„ Zˆ fd„Zˆ xZS )ÚTwelveToneMatrixai  
    An object representation of a 2-dimensional array of 12 pitches.
    Internal representation is as a :class:`~music21.stream.Stream`,
    which stores 12 Streams, each Stream a horizontal row of pitches
    in the matrix.

    This object is commonly used by calling the
    :meth:`~music21.stream.TwelveToneRow.matrix` method of
    :class:`~music21.stream.TwelveToneRow` (or a subclass).

    >>> ttr = serial.TwelveToneRow([0, 2, 11, 7, 8, 3, 9, 1, 4, 10, 6, 5])
    >>> aMatrix = ttr.matrix()
    >>> print(aMatrix)
      0  2  B  7  8  3  9  1  4  A  6  5
      A  0  9  5  6  1  7  B  2  8  4  3
      1  3  0  8  9  4  A  2  5  B  7  6
      5  7  4  0  1  8  2  6  9  3  B  A
      4  6  3  B  0  7  1  5  8  2  A  9
      9  B  8  4  5  0  6  A  1  7  3  2
      3  5  2  A  B  6  0  4  7  1  9  8
      B  1  A  6  7  2  8  0  3  9  5  4
      8  A  7  3  4  B  5  9  0  6  2  1
      2  4  1  9  A  5  B  3  6  0  8  7
      6  8  5  1  2  9  3  7  A  4  0  B
      7  9  6  2  3  A  4  8  B  5  1  0

    >>> repr(aMatrix)
    '<music21.serial.TwelveToneMatrix for [<music21.serial.TwelveToneRow row-1>]>'

    >>> fourthQuartetMatrix = serial.getHistoricalRowByName('SchoenbergOp37').matrix()
    >>> repr(fourthQuartetMatrix)
    '<music21.serial.TwelveToneMatrix for
         [<music21.serial.HistoricalTwelveToneRow Schoenberg Op. 37 Fourth String Quartet>]>'
    c                ó  — g }| D ]p}g }|D ]A}|                      t          |j        j        ¦  «                             d¦  «        ¦  «         ŒB|                      d                     |¦  «        ¦  «         Œqd                     |¦  «        S )z?
        Return a string representation of the matrix.
        é   Ú ú
)ÚappendÚstrr	   ÚpitchClassStringÚrjustÚjoin)ÚselfÚretÚrowFormÚmsgÚns        r   Ú__str__zTwelveToneMatrix.__str__L   s�   € ð ˆØð 	%ð 	%ˆGØˆCØð Cð C�Ø—
’
�3˜qœwÔ7Ñ8Ô8×>Ò>¸qÑAÔAÑBÔBÐBÐBØ�JŠJ�r—w’w˜s‘|”|Ñ$Ô$Ð$Ð$Ø�yŠy˜‰~Œ~Ðr   c                óÖ   •— | rGt          | d         t          ¦  «        rd| d         › d�S t          ¦   «                              ¦   «         S t          ¦   «                              ¦   «         S )Nr   zfor [ú])Ú
isinstanceÚToneRowÚsuperÚ_reprInternal)r   Ú	__class__s    €r   r*   zTwelveToneMatrix._reprInternalX   sb   ø€ Øð 	+Ý˜$˜qœ'¥7Ñ+Ô+ð /Ø)˜t AœwÐ)Ð)Ð)Ð)å‘w”w×,Ò,Ñ.Ô.Ð.å‘7”7×(Ò(Ñ*Ô*Ð*r   )r   r   r   Ú__doc__r$   r*   Ú__classcell__©r+   s   @r   r   r   (   sR   ø€ € € € € ð!ð !ðF
ð 
ð 
ð+ð +ð +ð +ð +ð +ð +ð +ð +r   r   Ú
WebernOp29ÚWebernzOp. 29z	Cantata I)r   é   é   é   é   é   é   é   é
   é	   r   é   Ú
WebernOp28zOp. 28zString Quartet)r3   r   r   r2   r7   r6   r5   r4   r9   r:   r1   r8   ÚSchoenbergOp24Mvmt5Ú
SchoenbergzOp. 24zSerenade, Mvt. 5, "Tanzscene")r9   r8   r   r   r5   r7   r4   r6   r:   r1   r3   r2   ÚSchoenbergOp24Mvmt4zSerenade, Mvt. 4, "Sonett")r5   r2   r   r1   r   r3   r:   r7   r9   r4   r6   r8   ÚSchoenbergJakobsleiterzDie Jakobsleiter)r3   r2   r4   r5   r:   r6   r   r   r1   r8   r7   r9   ÚSchoenbergOp27No4zOp. 27 No. 4z#Four Pieces for Mixed Chorus, No. 4)r3   r   r8   r7   r:   r5   r1   r   r2   r9   r4   r6   Ú
WebernOp23zOp. 23zThree Songs)r:   r   r6   r5   r8   r7   r2   r4   r3   r   r9   r1   ÚBergLuluActIIScene1ÚBergzLulu, Act II, Scene 1z0Perm. (Every 5th Note Of Transposed Primary Row))r8   r6   r3   r   r9   r2   r5   r1   r4   r:   r   r7   ÚSchoenbergOp27No1zOp. 27 No. 1z#Four Pieces for Mixed Chorus, No. 1)r7   r4   r2   r:   r6   r3   r   r5   r8   r9   r1   r   ÚBergLuluActIScene20zLulu, Act I , Scene XXz0Perm. (Every 7th Note Of Transposed Primary Row))r8   r7   r   r:   r4   r1   r5   r2   r9   r   r3   r6   ÚSchoenbergOp27No3zOp. 27 No. 3z#Four Pieces for Mixed Chorus, No. 3)r6   r7   r2   r5   r4   r   r1   r   r:   r8   r9   r3   ÚSchoenbergOp27No2zOp. 27 No. 2z#Four Pieces for Mixed Chorus, No. 2)r   r1   r5   r8   r2   r:   r   r6   r7   r4   r9   r3   ÚSchoenbergFragPianozFragment For Piano)r7   r9   r   r6   r3   r2   r:   r1   r4   r8   r5   r   ÚSchoenbergOp50BzOp. 50BzDe Profundis)r   r9   r:   r5   r2   r8   r6   r1   r   r7   r4   r3   ÚSchoenbergOp50CzOp. 50CzModern Psalms, The First Psalm)r5   r   r   r:   r1   r6   r4   r9   r7   r8   r3   r2   ÚSchoenbergOp50AzOp. 50AzThree Times A Thousand Years)r6   r9   r7   r5   r4   r1   r8   r2   r   r3   r   r:   ÚSchoenbergMosesAronzMoses And Aron)r9   r8   r5   r2   r   r3   r6   r4   r7   r:   r1   r   Ú
WebernOp25zOp. 25)r6   r5   r   r7   r3   r4   r2   r1   r8   r   r9   r:   ÚSchoenbergOp23No5zOp. 23, No. 5zFive Piano Pieces)r3   r9   r1   r6   r:   r7   r8   r2   r5   r   r   r4   ÚSchoenbergOp28No1zOp. 28 No. 1z%Three Satires for Mixed Chorus, No. 1)r   r5   r6   r3   r9   r1   r4   r   r2   r7   r:   r8   ÚSchoenbergOp28No3zOp. 28 No. 3z%Three Satires for Mixed Chorus, No. 3)r4   r7   r5   r:   r2   r8   r6   r9   r   r1   r3   r   Ú
WebernOp21zOp. 21zChamber Symphony)r4   r:   r6   r7   r8   r9   r   r5   r   r3   r2   r1   ÚSchoenbergIsraelExistszIsrael Exists Again)r   r   r5   r9   r1   r4   r2   r3   r8   r:   r7   r6   ÚSchoenbergOp35No2zOp. 35z!Six Pieces for Male Chorus, No. 2)r7   r9   r6   r3   r   r2   r4   r1   r8   r   r5   r:   ÚSchoenbergOp35No3z!Six Pieces for Male Chorus, No. 3)r   r7   r6   r:   r4   r   r9   r8   r5   r1   r2   r3   ÚSchoenbergOp35No1z!Six Pieces for Male Chorus, No. 1)r2   r1   r   r4   r5   r3   r:   r8   r9   r7   r   r6   ÚSchoenbergOp48No1zOp. 48zThree Songs, No. 1, "Sommermud")r3   r2   r   r7   r   r4   r5   r8   r1   r6   r9   r:   ÚSchoenbergOp35No5z!Six Pieces for Male Chorus, No. 5)r3   r6   r8   r2   r   r1   r:   r5   r   r7   r4   r9   ÚSchoenbergOp29ÚSuite)r   r6   r7   r8   r2   r1   r   r9   r:   r5   r4   r3   ÚBergLyricSuitePermz"Lyric Suite, Last Mvt. Permutation)r4   r7   r8   r5   r3   r9   r2   r:   r6   r   r   r1   Ú
WebernOp20zOp. 20zString Trio)r:   r6   r2   r3   r7   r4   r9   r8   r   r5   r   r1   ÚSchoenbergOp46zOp. 46zA Survivor From Warsaw)r7   r6   r   r:   r5   r   r1   r8   r4   r9   r3   r2   ÚSchoenbergFragOrganSonatazFragment of Sonata For Organ)r3   r6   r1   r   r9   r2   r:   r7   r8   r4   r   r5   ÚSchoenbergOp44zOp. 44z!Prelude To A Suite From "Genesis")r8   r7   r2   r4   r5   r   r1   r:   r3   r   r9   r6   ÚSchoenbergOp45zOp. 45)r2   r8   r   r9   r5   r3   r1   r:   r7   r6   r4   r   ÚSchoenbergOp33AzOp. 33AzTwo Piano Pieces, No. 1)r8   r4   r   r1   r9   r7   r3   r   r6   r:   r2   r5   ÚSchoenbergOp25zOp.25zSuite for Piano)r5   r4   r6   r3   r7   r   r:   r2   r1   r   r9   r8   ÚSchoenbergOp26zOp. 26zWind Quintet)r   r6   r9   r1   r3   r   r8   r2   r5   r7   r:   r4   ÚSchoenbergOp33BzOp. 33BzTwo Piano Pieces, No. 2)r1   r3   r4   r   r9   r:   r7   r8   r6   r5   r   r2   ÚBergViolinConcertoz!Concerto For Violin And Orchestra)r6   r8   r2   r7   r9   r   r5   r:   r1   r3   r   r4   Ú
WebernOp22zOp. 22z2Quartet For Violin, Clarinet, Tenor Sax, And Piano)r7   r   r2   r4   r5   r:   r9   r8   r1   r3   r6   r   ÚBergLuluzLulu: Primary Row)r   r5   r4   r2   r6   r9   r7   r:   r1   r8   r   r3   Ú
WebernOp30zOp. 30zVariations For Orchestra)r9   r8   r3   r   r1   r2   r   r7   r4   r5   r6   r:   Ú
WebernOp31zOp. 31z
Cantata II)r7   r9   r4   r5   r:   r   r6   r1   r8   r2   r3   r   ÚWebernOpNo17No1zOp. 17, No. 1z"Armer Sunder, Du")r1   r8   r4   r7   r   r5   r6   r:   r9   r   r3   r2   Ú
WebernOp24zConcerto For Nine Instruments)r1   r8   r2   r   r6   r7   r:   r5   r4   r   r3   r9   ÚSchoenbergOp48No2zThree Songs, No. 2, "Tot")r2   r   r9   r3   r8   r5   r:   r6   r   r1   r4   r7   Ú
WebernOp27zOp. 27zVariations For Piano)r   r1   r8   r2   r3   r   r7   r5   r6   r4   r9   r:   ÚSchoenbergOp47zOp. 47zFantasy For Violin And Piano)r8   r9   r3   r1   r4   r6   r   r5   r   r2   r:   r7   ÚWebernOp19No2zOp. 19, No. 2z"Ziehn Die Schafe")r:   r5   r9   r7   r6   r   r1   r4   r   r2   r8   r3   ÚWebernOp19No1zOp. 19, No. 1z"Weiss Wie Lilien")r6   r8   r7   r4   r   r9   r:   r3   r2   r1   r5   r   Ú
WebernOp26zDas Augenlicht)r:   r8   r9   r   r1   r   r5   r3   r4   r2   r7   r6   ÚSchoenbergFragPianoPhantasiazFragment of Phantasia For Piano)r3   r4   r   r7   r5   r:   r   r1   r2   r9   r8   r6   ÚBergDerWeinzDer Wein)r2   r5   r4   r6   r9   r8   r3   r7   r:   r   r1   r   ÚBergWozzeckPassacagliaz%Wozzeck, Act I, Scene 4 "Passacaglia")r   r1   r6   r3   r   r7   r5   r8   r9   r4   r:   r2   ÚWebernOp18No1zOp. 18, No. 1z"Schatzerl Klein")r   r1   r4   r:   r8   r9   r   r5   r3   r6   r2   r7   ÚWebernOp18No2zOp. 18, No. 2z
"Erlosung")r7   r9   r4   r:   r5   r6   r   r1   r2   r8   r3   r   ÚWebernOp18No3zOp. 18, No. 3z"Ave, Regina Coelorum")r5   r   r6   r7   r4   r1   r8   r2   r3   r   r9   r:   ÚSchoenbergOp42zOp. 42z Concerto For Piano And Orchestra)r   r8   r2   r4   r5   r   r7   r:   r3   r9   r1   r6   ÚSchoenbergOp48No3z!Three Songs, No, 3, "Madchenlied")r3   r6   r9   r1   r   r4   r8   r7   r5   r   r:   r2   ÚSchoenbergOp37zOp. 37zFourth String Quartet)r2   r3   r9   r8   r4   r   r5   r   r:   r6   r7   r1   ÚSchoenbergOp36zOp. 36z!Concerto for Violin and Orchestra)r9   r8   r   r1   r5   r7   r   r3   r6   r:   r2   r4   ÚSchoenbergOp34zOp. 34zAccompaniment to a Film Scene)r   r7   r2   r5   r3   r   r9   r1   r8   r:   r4   r6   ÚBergChamberConcertozChamber Concerto)r1   r6   r4   r9   r2   r   r7   r:   r   r3   r5   r8   ÚSchoenbergOp32zOp. 32zVon Heute Auf Morgen)r2   r   r9   r3   r1   r4   r:   r6   r5   r   r8   r7   ÚSchoenbergOp31zVariations for Orchestra)r8   r5   r7   r   r4   r9   r2   r3   r6   r:   r1   r   ÚSchoenbergOp30zThird String Quartet)r6   r5   r   r9   r   r4   r7   r1   r8   r3   r:   r2   ÚBergLyricSuitezLyric Suite Primary Row)r4   r5   r   r9   r6   r2   r:   r3   r   r7   r8   r1   zOp. 41zOde To Napoleon)r3   r   r5   r4   r9   r:   r   r2   r7   r6   r1   r8   zOp. 17, No. 3z"Heiland, Unsere Missetaten...")r:   r4   r5   r   r6   r7   r   r3   r2   r1   r8   r9   zOp. 17, No. 2z"Liebste Jungfrau")r3   r   r1   r6   r:   r2   r   r7   r4   r5   r9   r8   )ÚSchoenbergOp41ÚWebernOp17No3ÚWebernOp17No2c                  óŠ   ‡ — e Zd ZU dZddiZded<   g d¢Zdˆ fd„	Zˆ fd	„Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zˆ xZS )r(   aU  
    A Stream representation of a tone row, or an ordered sequence of pitches;
    can most importantly be used to deal with
    serial transformations.

    Unlike a normal Stream, the first argument is assumed to be a ToneRow:

    >>> toneRow = serial.ToneRow([10, 9, 4, 5, 6, 3, 2, 8, 7, 11, 0, 1])

    The representation of a ToneRow will be the contents:

    >>> toneRow
    <music21.serial.ToneRow A94563287B01>

    Unless (like a Stream), the id is set:

    >>> toneRow.id = 'retrograde_jungfrau'
    >>> toneRow
    <music21.serial.ToneRow retrograde_jungfrau>

    A ToneRow does not need to have twelve pitches, like this ten-tone row
    from Ruth Crawford Seeger's String Quartet 1931

    >>> rcsRow = serial.ToneRow([2, 4, 5, 3, 6, 9, 8, 7, 1, 0])
    >>> rcsRow
    <music21.serial.ToneRow 2453698710>
    >>> len(rcsRow)
    10
    Úrowz6A list representing the pitch class values of the row.údict[str, str]Ú	_DOC_ATTR)	ÚpitchClassesÚ	noteNamesÚisTwelveToneRowÚ	isSameRowÚgetIntervalsAsStringÚzeroCenteredTransformationÚoriginalCenteredTransformationÚfindZeroCenteredTransformationsÚ#findOriginalCenteredTransformationsNc                óŠ  •—  t          ¦   «         j        di |¤Ž |�|| _        ng | _        | j        D ]�}t          |t          j        t          j        f¦  «        st	          j        |¦  «        }t          |t          j        ¦  «        st          j        |¬¦  «        }n|}d |j        _        |  	                    |¦  «         Œ�d S )Nr   r   )
r)   Ú__init__r…   r'   r	   ÚPitchr   ÚNoteÚoctaver   )r   r…   ÚkeywordsÚpcr#   r+   s        €r   r’   zToneRow.__init__#  s¿   ø€ Ø�‰ŒÔÐ$Ð$˜8Ð$Ð$Ð$Øˆ?ØˆDŒHˆHàˆDŒHà”(ð 
	ð 
	ˆBÝ˜b¥5¤;µ´	Ð":Ñ;Ô;ð %Ý”[ ‘_”_�å˜b¥$¤)Ñ,Ô,ð Ý”I BÐ'Ñ'Ô'��à�à!ˆAŒGŒNØ�KŠK˜‰NŒNˆNˆNð
	ð 
	r   c                ó°   •— t          ¦   «                              ¦   «         }|                     d¦  «        s|S d                     d„ | D ¦   «         ¦  «        S )NÚ0xr   c              3  ó.   K  — | ]}|j         j        V — Œd S ©N)r	   r   ©Ú.0r#   s     r   ú	<genexpr>z(ToneRow._reprInternal.<locals>.<genexpr>;  s'   è è € Ð>Ð>°A�q”wÔ/Ð>Ð>Ð>Ð>Ð>Ð>r   )r)   r*   Ú
startswithr   )r   ÚsuperInternalr+   s     €r   r*   zToneRow._reprInternal6  sU   ø€ Ý™œ×-Ò-Ñ/Ô/ˆØ×'Ò'¨Ñ-Ô-ð 	!Ø Ð à�wŠwÐ>Ð>¸Ð>Ñ>Ô>Ñ>Ô>Ð>r   c                ó   — d„ | D ¦   «         }|S )a;  
        Convenience function showing the pitch classes of a
        :class:`~music21.serial.ToneRow` as a list.

        >>> fiveFold = [5 * i for i in range(12)]
        >>> fiveFold
        [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]

        >>> quintupleRow = serial.pcToToneRow(fiveFold)
        >>> quintupleRow
        <music21.serial.TwelveToneRow 05A3816B4927>
        >>> quintupleRow.pitchClasses()
        [0, 5, 10, 3, 8, 1, 6, 11, 4, 9, 2, 7]

        >>> halfStep = serial.pcToToneRow([0, 1])
        >>> halfStep.pitchClasses()
        [0, 1]
        c                ó&   — g | ]}|j         j        ‘ŒS r   ©r	   Ú
pitchClassrœ   s     r   ú
<listcomp>z(ToneRow.pitchClasses.<locals>.<listcomp>P  s   € Ð6Ð6Ð6¨A�Q”WÔ'Ð6Ð6Ð6r   r   )r   Ú	pitchLists     r   rˆ   zToneRow.pitchClasses=  s   € ð& 7Ð6°Ð6Ñ6Ô6ˆ	ØÐr   c                ó   — d„ | D ¦   «         }|S )a  
        Convenience function showing the note names of a
        :class:`~music21.serial.ToneRow` as a list.

        >>> chromatic = serial.TwelveToneRow(range(12))
        >>> chromatic.noteNames()
        ['C', 'C#', 'D', 'E-', 'E', 'F', 'F#', 'G', 'G#', 'A', 'B-', 'B']

        >>> halfStep = serial.ToneRow([0, 1])
        >>> halfStep.noteNames()
        ['C', 'C#']
        c                ó   — g | ]	}|j         ‘Œ
S r   ©Úname©r�   Úps     r   r¥   z%ToneRow.noteNames.<locals>.<listcomp>`  s   € Ð)Ð)Ð)˜q�A”FÐ)Ð)Ð)r   r   )r   ÚnoteLists     r   r‰   zToneRow.noteNamesS  s   € ð *Ð) DÐ)Ñ)Ô)ˆØˆr   c                óŒ   — |                       ¦   «         }t          |¦  «        dk    rdS d}t          d¦  «        D ]}||vrd}Œ	|S )aÙ  
        Describes whether a :class:`~music21.serial.ToneRow` constitutes
        a twelve-tone row. Note that a
        :class:`~music21.serial.TwelveToneRow` object might not be a twelve-tone row.

        >>> serial.ToneRow([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]).isTwelveToneRow()
        True
        >>> serial.ToneRow([0, 4, 8]).isTwelveToneRow()
        False
        >>> serial.ToneRow([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]).isTwelveToneRow()
        False
        é   FT)rˆ   ÚlenÚrange)r   r¦   ÚtempÚis       r   rŠ   zToneRow.isTwelveToneRowc  s[   € ð ×%Ò%Ñ'Ô'ˆ	Ýˆy‰>Œ>˜RÒÐØ�5àˆDÝ˜2‘Y”Yð !ð !�Ø˜IÐ%Ð%Ø �DøØˆKr   c                óì   — |                       ¦   «         }t          ¦   «         }|D ]N}t          j        ¦   «         }d|j        _        ||j        _        d|j        _        | 	                    |¦  «         ŒO|S )a  
        Convenience function returning a :class:`~music21.serial.TwelveToneRow` with the
        same pitches.
        Note that a :class:`~music21.serial.ToneRow` may be created without being a
        true twelve tone row.

        >>> r1 = serial.pcToToneRow(range(11))
        >>> type(r1)
        <class 'music21.serial.ToneRow'>
        >>> n = note.Note()
        >>> n.pitch.pitchClass = 11
        >>> r1.append(n)
        >>> r2 = r1.makeTwelveToneRow()
        >>> type(r2)
        <class 'music21.serial.TwelveToneRow'>
        ç        N)
rˆ   ÚTwelveToneRowr   r”   ÚdurationÚquarterLengthr	   r¤   r•   r   )r   ÚpcSetÚaÚthisPcr#   s        r   ÚmakeTwelveToneRowzToneRow.makeTwelveToneRowz  sk   € ð$ ×!Ò!Ñ#Ô#ˆÝ‰OŒOˆØð 	ð 	ˆFÝ”	‘”ˆAØ'*ˆAŒJÔ$Ø!'ˆAŒGÔØ!ˆAŒGŒNØ�HŠH�Q‰KŒKˆKˆKØˆr   c                ó°   — t          | ¦  «        t          |¦  «        k    rdS t          | |¦  «        D ]"\  }}|j        j        |j        j        k    r dS Œ#dS )ao  
        Convenience function describing if two rows are the same.

        >>> row1 = serial.pcToToneRow([6, 7, 8])
        >>> row2 = serial.pcToToneRow([-6, 19, 128])
        >>> row3 = serial.pcToToneRow([6, 7, -8])
        >>> row1.isSameRow(row2)
        True
        >>> row2.isSameRow(row1)
        True
        >>> row1.isSameRow(row3)
        False
        FT)r°   Úzipr	   r¤   )r   ÚotherÚselfToneÚ	otherTones       r   r‹   zToneRow.isSameRow–  se   € õ ˆt‰9Œ9�˜E™
œ
Ò"Ð"Ø�5å#& t¨UÑ#3Ô#3ð 	ð 	ÑˆH�iØŒ~Ô(¨I¬OÔ,FÒFÐFØ�u�uð Gàˆtr   c                ó  — t          | ¦  «        }|                      ¦   «         }d}t          |dz
  ¦  «        D ]R}||dz            ||         z
  dz  }|t          d¦  «        v r|t          |¦  «        z   }|dk    r|dz   }|dk    r|dz   }ŒS|S )a¢  

        Returns the string of intervals between consecutive pitch classes of
        a :class:`~music21.serial.ToneRow`.
        'T' = 10, 'E' = 11.

        >>> cRow = serial.pcToToneRow([0])
        >>> cRow.getIntervalsAsString()
        ''
        >>> reverseChromatic = serial.pcToToneRow([11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
        >>> reverseChromatic.getIntervalsAsString()
        'EEEEEEEEEEE'
        r   r3   r¯   r8   ÚTr1   ÚE)r°   rˆ   r±   r   )r   Ú
numPitchesr¦   ÚintervalStringr³   Úintervals         r   rŒ   zToneRow.getIntervalsAsString¬  sª   € õ ˜‘Y”Yˆ
Ø×%Ò%Ñ'Ô'ˆ	ØˆÝ�z A‘~Ñ&Ô&ð 	6ð 	6ˆAØ! ! a¡%Ô(¨9°Q¬<Ñ7¸2Ñ=ˆHØ�5 ™9œ9Ð$Ð$Ø!/µ#°h±-´-Ñ!?�Ø˜2Š~ˆ~Ø!/°#Ñ!5�Ø˜2Š~ˆ~Ø!/°#Ñ!5�øØÐr   c                óî  — t          | ¦  «        }|                      ¦   «         }t          |¦  «        |k    rt          d¦  «        ‚|d         }g }|dv r9t	          |¦  «        D ](}||         |z
  |z   dz  }|                     |¦  «         Œ)nÛ|dk    r9t	          |¦  «        D ](}||z   ||         z
  dz  }|                     |¦  «         Œ)nœ|dk    r?t	          |¦  «        D ].}|||dz
  |z
           z   |z
  dz  }|                     |¦  «         Œ/nW|dk    r?t	          |¦  «        D ].}|||dz
  |z
           z
  |z   dz  }|                     |¦  «         Œ/nt          d	|› �¦  «        ‚t          |¦  «        S )
aT  
        Returns a :class:`~music21.serial.ToneRow` giving a transformation of a tone row.
        Admissible transformationTypes are 'P' (prime), 'I' (inversion),
        'R' (retrograde), and 'RI' (retrograde inversion).

        In the "zero-centered" convention,
        the transformations Pn and In start on the pitch class n, and the transformations
        Rn and RIn end on the pitch class n.

        >>> chromatic = serial.pcToToneRow(range(12))
        >>> chromatic.pitchClasses()
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
        >>> chromaticP3 = chromatic.zeroCenteredTransformation('P',3)
        >>> chromaticP3.pitchClasses()
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2]
        >>> chromaticI6 = chromatic.zeroCenteredTransformation('I',6)
        >>> chromaticI6.pitchClasses()
        [6, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7]
        >>> schoenberg = serial.getHistoricalRowByName('SchoenbergOp26')
        >>> schoenberg.pitchClasses()
        [3, 7, 9, 11, 1, 0, 10, 2, 4, 6, 8, 5]
        >>> schoenbergR8 = schoenberg.zeroCenteredTransformation('R',8)
        >>> schoenbergR8.pitchClasses()
        [10, 1, 11, 9, 7, 3, 5, 6, 4, 2, 0, 8]
        >>> schoenbergRI9 = schoenberg.zeroCenteredTransformation('RI',9)
        >>> schoenbergRI9.noteNames()
        ['G', 'E', 'F#', 'G#', 'B-', 'D', 'C', 'B', 'C#', 'E-', 'F', 'A']
        z%Transformation must be by an integer.r   ©ÚPrÃ   r¯   ÚIÚRr3   ÚRIzInvalid transformation type: )r°   rˆ   Úintr   r±   r   ÚpcToToneRow)	r   ÚtransformationTypeÚindexrÅ   r¦   Ú
firstPitchÚtransformedPitchListr³   ÚnewPitchs	            r   r�   z"ToneRow.zeroCenteredTransformationÇ  sì  € õ: ˜‘Y”Yˆ
Ø×%Ò%Ñ'Ô'ˆ	Ýˆu‰:Œ:˜ÒÐÝ!Ð"IÑJÔJÐJà˜q”\ˆ
Ø!ÐØ Ð+Ð+Ý˜:Ñ&Ô&ð 6ð 6�Ø% aœL¨:Ñ5¸Ñ=ÀÑC�Ø$×+Ò+¨HÑ5Ô5Ð5Ð5ð6ð   3Ò&Ð&Ý˜:Ñ&Ô&ð 6ð 6�Ø! JÑ.°¸1´Ñ=ÀÑC�Ø$×+Ò+¨HÑ5Ô5Ð5Ð5ð6ð   3Ò&Ð&Ý˜:Ñ&Ô&ð 6ð 6�Ø! I¨j¸1©n¸qÑ.@Ô$AÑAÀJÑNÐRTÑT�Ø$×+Ò+¨HÑ5Ô5Ð5Ð5ð6ð   4Ò'Ð'Ý˜:Ñ&Ô&ð 6ð 6�Ø! I¨j¸1©n¸qÑ.@Ô$AÑAÀJÑNÐRTÑT�Ø$×+Ò+¨HÑ5Ô5Ð5Ð5ð6õ "Ð"VÐBTÐ"VÐ"VÑWÔWÐWåÐ/Ñ0Ô0Ð0r   rÐ   r   rÑ   rÎ   c                óª   — |                       ¦   «         }|d         }||z   dz  }|dv r|                      d|¦  «        S |                      ||¦  «        S )av  
        Returns a :class:`~music21.serial.ToneRow` giving a transformation of a tone row.
        Admissible transformations are 'T' (transposition), 'I' (inversion),
        'R' (retrograde), and 'RI' (retrograde inversion).

        In the "original-centered" convention,
        which is less common than the "zero-centered" convention, the original row is not initially
        transposed to start on the pitch class 0. Thus, the transformation Tn transposes
        the original row up by n semitones, and the transformations In, Rn, and RIn first
        transform the row appropriately (without transposition), then transpose the resulting
        row by n semitones.

        >>> chromatic = serial.pcToToneRow(range(12))
        >>> chromatic.pitchClasses()
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
        >>> chromaticP3 = chromatic.originalCenteredTransformation('T',3)
        >>> chromaticP3.pitchClasses()
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2]
        >>> chromaticI6 = chromatic.originalCenteredTransformation('I',6)
        >>> chromaticI6.pitchClasses()
        [6, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7]
        >>> schoenberg = serial.getHistoricalRowByName('SchoenbergOp26')
        >>> schoenberg.pitchClasses()
        [3, 7, 9, 11, 1, 0, 10, 2, 4, 6, 8, 5]
        >>> schoenbergR8 = schoenberg.originalCenteredTransformation('R',8)
        >>> schoenbergR8.pitchClasses()
        [1, 4, 2, 0, 10, 6, 8, 9, 7, 5, 3, 11]
        >>> schoenbergRI9 = schoenberg.originalCenteredTransformation('RI',9)
        >>> schoenbergRI9.noteNames()
        ['B-', 'G', 'A', 'B', 'C#', 'F', 'E-', 'D', 'E', 'F#', 'G#', 'C']
        r   r¯   rÉ   rÊ   )rˆ   r�   )r   rÐ   rÑ   r¦   rÒ   ÚnewIndexs         r   rŽ   z&ToneRow.originalCenteredTransformation   sf   € ð@ ×%Ò%Ñ'Ô'ˆ	Ø˜q”\ˆ
Ø Ñ&¨"Ñ,ˆØ Ð+Ð+Ø×2Ò2°3¸ÑAÔAÐAà×.Ò.Ð/AÀ8ÑLÔLÐLr   Úreturnút.Union[bool, list[t.Any]]c                ó¾  — t          | ¦  «        t          |¦  «        k    rdS |                     ¦   «         }g }|d         }|d         }||                      d|¦  «                             ¦   «         k    rd|f}|                     |¦  «         ||                      d|¦  «                             ¦   «         k    rd|f}|                     |¦  «         ||                      d|¦  «                             ¦   «         k    rd|f}|                     |¦  «         ||                      d|¦  «                             ¦   «         k    rd|f}|                     |¦  «         |S )aZ  
        Gives the list of zero-centered serial transformations
        taking one :class:`~music21.serial.ToneRow`
        to another, the second specified in the argument. Each transformation is given as a
        tuple of the transformation type and index.

        See :meth:`~music21.serial.ToneRow.zeroCenteredTransformation` for
        an explanation of this convention.

        >>> chromatic = serial.pcToToneRow([2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1])
        >>> reverseChromatic = serial.pcToToneRow([8, 7, 6, 5, 4, 3, 2, 1, 0, 11, 10, 9])
        >>> chromatic.findZeroCenteredTransformations(reverseChromatic)
        [('I', 8), ('R', 9)]
        >>> schoenberg25 = serial.getHistoricalRowByName('SchoenbergOp25')
        >>> schoenberg26 = serial.pcToToneRow(serial.getHistoricalRowByName(
        ...                                        'SchoenbergOp26').row)
        >>> schoenberg25.findZeroCenteredTransformations(schoenberg26)
        []
        >>> schoenberg26.findZeroCenteredTransformations(
        ...     schoenberg26.zeroCenteredTransformation('RI', 8))
        [('RI', 8)]
        Fr   éÿÿÿÿrÊ   rË   rÌ   rÍ   )r°   rˆ   r�   r   )r   ÚotherRowÚotherRowPitchesÚtransformationListrÒ   Ú	lastPitchÚtransformations          r   r�   z'ToneRow.findZeroCenteredTransformations(  sa  € õ. ˆt‰9Œ9�˜H™œÒ%Ð%Ø�5à"×/Ò/Ñ1Ô1ˆØÐØ$ QÔ'ˆ
Ø# BÔ'ˆ	à˜d×=Ò=¸cÀ:ÑNÔN×[Ò[Ñ]Ô]Ò]Ð]Ø  *˜_ˆNØ×%Ò% nÑ5Ô5Ð5Ø˜d×=Ò=¸cÀ:ÑNÔN×[Ò[Ñ]Ô]Ò]Ð]Ø  *˜_ˆNØ×%Ò% nÑ5Ô5Ð5Ø˜d×=Ò=¸cÀ9ÑMÔM×ZÒZÑ\Ô\Ò\Ð\Ø  )˜^ˆNØ×%Ò% nÑ5Ô5Ð5Ø˜d×=Ò=¸dÀIÑNÔN×[Ò[Ñ]Ô]Ò]Ð]Ø! 9˜_ˆNØ×%Ò% nÑ5Ô5Ð5à!Ð!r   c                ó¬  — |                       ¦   «         }|                      ¦   «         }g }|d         }|d         }|d         }||z
  dz  }||z
  dz  }	|d|z  z
  |z   dz  }
| j        }| |d|¦  «                              ¦   «         k    rd|f}|                     |¦  «         | |d|¦  «                              ¦   «         k    rd|f}|                     |¦  «         | |d|	¦  «                              ¦   «         k    rd|	f}|                     |¦  «         | |d|
¦  «                              ¦   «         k    rd|
f}|                     |¦  «         |S )	a4  
        Gives the list of original-centered serial transformations taking one
        :class:`~music21.serial.ToneRow`
        to another, the second specified in the argument. Each transformation is given as a tuple
        of the transformation type and index.

        See :meth:`~music21.serial.ToneRow.originalCenteredTransformation` for an
        explanation of this convention.

        >>> chromatic = serial.pcToToneRow(       [2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B',   0, 1])
        >>> reverseChromatic = serial.pcToToneRow([8, 7, 6, 5, 4, 3, 2, 1, 0,   'B', 'A', 9])
        >>> chromatic.findOriginalCenteredTransformations(reverseChromatic)
        [('I', 6), ('R', 7)]
        >>> schoenberg25 = serial.getHistoricalRowByName('SchoenbergOp25')
        >>> schoenberg26 = serial.getHistoricalRowByName('SchoenbergOp26')
        >>> schoenberg25.findOriginalCenteredTransformations(schoenberg26)
        []
        >>> schoenberg26.findOriginalCenteredTransformations(
        ...     schoenberg26.originalCenteredTransformation('RI',8))
        [('RI', 8)]
        r   rÚ   r¯   r2   rÃ   rË   rÌ   rÍ   )rˆ   rŽ   r   )r   rÛ   ÚoriginalRowPitchesrÜ   rÝ   ÚoldFirstPitchÚoldLastPitchÚnewFirstPitchÚtiPitchÚrPitchÚriPitchÚocTransrß   s                r   r�   z+ToneRow.findOriginalCenteredTransformationsV  s˜  € ð. "×.Ò.Ñ0Ô0ÐØ"×/Ò/Ñ1Ô1ˆØÐØ*¨1Ô-ˆØ)¨"Ô-ˆØ'¨Ô*ˆð ! =Ñ0°BÑ6ˆð   ,Ñ.°"Ñ4ˆð ! A¨Ñ$5Ñ6¸ÑEÈÑKˆð Ô5ˆà˜g˜g c¨7Ñ3Ô3×@Ò@ÑBÔBÒBÐBØ! 7˜^ˆNØ×%Ò% nÑ5Ô5Ð5Ø˜g˜g c¨7Ñ3Ô3×@Ò@ÑBÔBÒBÐBØ! 7˜^ˆNØ×%Ò% nÑ5Ô5Ð5Ø˜g˜g c¨6Ñ2Ô2×?Ò?ÑAÔAÒAÐAØ! 6˜]ˆNØ×%Ò% nÑ5Ô5Ð5Ø˜g˜g d¨GÑ4Ô4×AÒAÑCÔCÒCÐCØ" G˜_ˆNØ×%Ò% nÑ5Ô5Ð5à!Ð!r   r›   )rÐ   r   rÑ   rÎ   )r×   rØ   )r   r   r   r,   r‡   Ú__annotations__Ú
_DOC_ORDERr’   r*   rˆ   r‰   rŠ   r¼   r‹   rŒ   r�   rŽ   r�   r�   r-   r.   s   @r   r(   r(   ü   s@  ø€ € € € € € ðð ð< 	ÐGð!€Ið ð ð ñ ð\ð \ð \€Jð
ð ð ð ð ð ð&?ð ?ð ?ð ?ð ?ðð ð ð,ð ð ð ð ð ð.ð ð ð8ð ð ð,ð ð ð671ð 71ð 71ðr&Mð &Mð &Mð &MðP,"ð ,"ð ,"ð ,"ð\7"ð 7"ð 7"ð 7"ð 7"ð 7"ð 7"r   r(   c                  óJ   — e Zd ZdZg d¢Zd„ Zd„ Zd„ Zdd„Zd	„ Z	dd
„Z
dd„ZdS )r¶   z^
    A Stream representation of a twelve-tone row, capable of producing a 12-tone matrix.
    )ÚmatrixÚisAllIntervalÚgetLinkClassificationÚisLinkChordÚareCombinatorialc                óü  ‡— |                       t          j        ¦  «        Šd„ ‰D ¦   «         }ˆfd„|D ¦   «         }t          ¦   «         }d}|D ]®}|dz  }|                      ¦   «         }|                     | ¦  «         dt          |¦  «        z   |_        |D ]N}t          j        ¦   «         }d|j        _	        ||j
        _        d|j
        _        |                     |¦  «         ŒO|                     d|¦  «         Œ¯|S )a  
        Returns a :class:`~music21.serial.TwelveToneMatrix` object for the row.
        That object can just be printed (or displayed via .show())

        >>> src = serial.getHistoricalRowByName('SchoenbergOp37')
        >>> [p.name for p in src]
        ['D', 'C#', 'A', 'B-', 'F', 'E-', 'E', 'C', 'G#', 'G', 'F#', 'B']
        >>> len(src)
        12
        >>> s37 = serial.getHistoricalRowByName('SchoenbergOp37').matrix()
        >>> print(s37)
          0  B  7  8  3  1  2  A  6  5  4  9
          1  0  8  9  4  2  3  B  7  6  5  A
          5  4  0  1  8  6  7  3  B  A  9  2
          4  3  B  0  7  5  6  2  A  9  8  1
        ...
        >>> [str(e.pitch) for e in s37[0]]
        ['C', 'B', 'G', 'G#', 'E-', 'C#', 'D', 'B-', 'F#', 'F', 'E', 'A']
        c                ó2   — g | ]}d |j         j        z
  d z  ‘ŒS ©r¯   r£   ©r�   Úxs     r   r¥   z(TwelveToneRow.matrix.<locals>.<listcomp>²  s'   € Ð>Ð>Ð>°ˆb�1”7Ô%Ñ%¨Ñ+Ð>Ð>Ð>r   c                ó.   •‡— g | ]Šˆfd „‰D ¦   «         ‘ŒS )c                ó4   •— g | ]}|j         j        ‰z   d z  ‘ŒS ró   r£   ©r�   rõ   Útranss     €r   r¥   z3TwelveToneRow.matrix.<locals>.<listcomp>.<listcomp>³  s(   ø€ ÐGÐGÐG¸�A”GÔ&¨Ñ.°"Ñ4ÐGÐGÐGr   r   )r�   rù   r­   s    @€r   r¥   z(TwelveToneRow.matrix.<locals>.<listcomp>³  s/   øø€ ÐWÐWÐWÈEÐGÐGÐGÐG¸hÐGÑGÔGÐWÐWÐWr   r   r3   zrow-rµ   N)ÚgetElementsByClassr   r”   r   r+   ÚmergeAttributesr   Úidr·   r¸   r	   r¤   r•   r   Úinsert)	r   r³   rì   Ú	matrixObjr…   Ú	rowObjectr¬   r#   r­   s	           @r   rì   zTwelveToneRow.matrix™  s  ø€ ð. ×*Ò*­4¬9Ñ5Ô5ˆà>Ð>°XÐ>Ñ>Ô>ˆØWÐWÐWÐWÐUVÐWÑWÔWˆå$Ñ&Ô&ˆ	ØˆØð 	+ð 	+ˆCØ�‰FˆAØŸšÑ(Ô(ˆIØ×%Ò% dÑ+Ô+Ð+Ø!¥C¨¡F¤F™?ˆIŒLØð $ð $�Ý”I‘K”K�Ø+.�”
Ô(Ø%&�”Ô"Ø!%�””Ø× Ò  Ñ#Ô#Ð#Ð#Ø×Ò˜Q 	Ñ*Ô*Ð*Ð*ð
 Ðr   c                óŒ   — g }t           D ]9}|                      t          |¦  «        ¦  «        r|                     |¦  «         Œ:|S )a  
        Checks if a given :class:`music21.serial.TwelveToneRow` is the same as
        any of the historical
        twelve-tone rows stored by music21: see :func:`music21.serial.getHistoricalRowByName`.
        Returns a list of names of historical rows to which the input row is identical.

        >>> row = serial.pcToToneRow([2, 3, 9, 1, 11, 5, 8, 7, 4, 0, 10, 6])
        >>> row.findHistorical()
        ['SchoenbergOp32']
        >>> chromatic = serial.pcToToneRow(range(12))
        >>> chromatic.findHistorical()
        []
        )ÚhistoricalDictr‹   ÚgetHistoricalRowByNamer   )r   ÚsameRowsÚhistoricalRows      r   ÚfindHistoricalzTwelveToneRow.findHistoricalÉ  sM   € ð ˆÝ+ð 	/ð 	/ˆMØ�~Š~Õ4°]ÑCÔCÑDÔDð /Ø—’ Ñ.Ô.Ð.øØˆr   c                ó\  — g }|dk    rGt           D ]=}t          |¦  «                             | ¦  «        }|r|                     ||f¦  «         Œ>|S |dk    rIt           D ]?}t          |¦  «        }|                     | ¦  «        }|r|                     ||f¦  «         Œ@|S t          d¦  «        ‚)aT  
        Checks if a given :class:`music21.serial.TwelveToneRow` is a transformation of
        any historical
        twelve-tone row stored by music21 (see :func:`music21.serial.getHistoricalRowByName`).
        Returns a list
        of tuples, the tuple consisting of the name of a historical row, and a
        list of transformations relating
        the input row to the historical row.

        The convention for serial transformations must also be specified as 'zero' or
        'original', as explained
        in :meth:`~music21.serial.ToneRow.findZeroCenteredTransformations` and
        :meth:`~music21.serial.ToneRow.findOriginalCenteredTransformations`.

        >>> row = serial.pcToToneRow([5, 9, 11, 3, 6, 7, 4, 10, 0, 8, 2, 1])
        >>> row.findTransformedHistorical('original')
        [('SchoenbergOp32', [('R', 11)])]
        ÚzeroÚoriginalz1Invalid convention - choose 'zero' or 'original'.)r  r  r�   r   r�   r   )r   Ú
conventionr  r  rù   ÚhistoricalRowObjects         r   ÚfindTransformedHistoricalz'TwelveToneRow.findTransformedHistoricalÝ  sÔ   € ð& ˆØ˜ÒÐÝ!/ð <ð <�Ý.¨}Ñ=Ô=×]Ò]Ð^bÑcÔc�Øð <Ø—O’O ]°EÐ$:Ñ;Ô;Ð;øØˆOØ˜Ò#Ð#Ý!/ð <ð <�Ý&<¸]Ñ&KÔ&KÐ#Ø+×OÒOÐPTÑUÔU�Øð <Ø—O’O ]°EÐ$:Ñ;Ô;Ð;øØˆOå!Ð"UÑVÔVÐVr   r×   Úboolc                óà   — |                       ¦   «         du rt          d¦  «        ‚d}|                      ¦   «         }t          dd¦  «        D ]}t	          |¦  «        |vrd}Œd|vrd}d|vrd}|S )aò  
        Describes whether a :class:`~music21.serial.TwelveToneRow` is an all-interval row.

        >>> chromatic = serial.pcToToneRow(range(12))
        >>> chromatic.pitchClasses()
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
        >>> chromatic.isAllInterval()
        False
        >>> bergLyric = serial.getHistoricalRowByName('BergLyricSuite')
        >>> bergLyric.pitchClasses()
        [5, 4, 0, 9, 7, 2, 8, 1, 3, 6, 10, 11]
        >>> bergLyric.isAllInterval()
        True
        Fz.An all-interval row must be a twelve-tone row.Tr3   r8   rÃ   rÄ   )rŠ   r   rŒ   r±   r   )r   ÚtempAllIntervalrÆ   r³   s       r   rí   zTwelveToneRow.isAllInterval  s”   € ð  ×ÒÑ!Ô! UÐ*Ð*Ý!Ð"RÑSÔSÐSàˆØ×2Ò2Ñ4Ô4ˆÝ�q˜"‘”ð 	(ð 	(ˆAÝ�1‰vŒv˜^Ð+Ð+Ø"'�øØ�nÐ$Ð$Ø#ˆOØ�nÐ$Ð$Ø#ˆOØÐr   c                óÖ  — g d¢}g d¢}g d¢}t          |¦  «        }|                      ¦   «         du rt          d¦  «        ‚| |                      dd¦  «        |                      dd¦  «        |                      d	d¦  «        g}g }d
}|D ]W}|                     ¦   «         }	t          |¦  «        D ]1}
||
         |	k    r#||
         }|                     ||
         ¦  «         Œ2ŒX|sd
g fS ||fS )aJ  
        Gives the classification number of a Link Chord
        (as given in http://www.johnlinkmusic.com/LinkChords.pdf),
        that is, is an all-interval twelve-tone row containing a voicing of the
        all-trichord hexachord: [0, 1, 2, 4, 7, 8].
        In addition, gives a list of sets of five contiguous intervals
        within the row representing a voicing
        of the all-trichord hexachord. Note that the interval sets may be transformed.

        Named for John Link who discovered them.

        >>> bergLyric = serial.getHistoricalRowByName('BergLyricSuite')
        >>> bergLyric.pitchClasses()
        [5, 4, 0, 9, 7, 2, 8, 1, 3, 6, 10, 11]
        >>> bergLyric.isAllInterval()
        True
        >>> bergLyric.getLinkClassification()
        (None, [])
        >>> link = serial.pcToToneRow([0, 3, 8, 2, 10, 11, 9, 4, 1, 5, 7, 6])
        >>> link.getLinkClassification()
        (62, ['8352E'])
        >>> doubleLink = serial.pcToToneRow([0, 1, 8, 5, 7, 10, 4, 3, 11, 9, 2, 6])
        >>> doubleLink.getLinkClassification()
        (33, ['236E8', '36E8T'])
        )îÚ125634T97E8Ú134E78526T9Ú134E79T6258r  Ú1367T89E254Ú137E542896TÚ137E982456TÚ142965837ETÚ142973856ETÚ1429738E65TÚ14297TE6853Ú145638E729TÚ1456T729E83Ú1456T982E73Ú145927E836TÚ14598E63T72Ú14689T7E253Ú1469E27T853Ú149278356ETÚ1492783E65TÚ1496258T73EÚ1496E358T72Ú14972836E5TÚ14972E6385TÚ1497T853E62Ú14E379T6528Ú14E6T783529Ú172E6853T94Ú17356ET8294Ú1738T542E69Ú173E65T8294Ú1763T4952E8Ú176852E34T9Ú179236E8T54r0  Ú17923E685T4Ú179245T8E63Ú17924T586E3Ú179T65234E8Ú179T8E63254r5  Ú1825E43796Tr6  Ú1825E79T364r7  Ú1852E43769TÚ1852E79463TÚ185629TE743Ú18563479TE2Ú18563E7T492Ú18734E5296Tr=  Ú187E259436Tr>  Ú18T352E7964Ú18T497E3562Ú18T97E52364rA  Ú18E63T79452rB  Ú19476538TE2Ú1947T8536E2Ú1954763T8E2Ú19742538E6TÚ197425T6E83Ú1974T8E6352Ú197T8532E64Ú1T5E7928364Ú1T63E874259Ú1T6E3852479Ú1T8352E4679Ú1T974253E68Ú214367TE985Ú214376598ETrP  Ú2143E86597TÚ2149586E37TÚ214976538ETrS  Ú216734ET985Ú216743E9T85Ú217634TE985Ú21T8E956347Ú21T96583E47Ú234T1596E87Ú235189E647TrZ  Ú23689E7T145Ú236E981547Tr\  Ú23T514697E8Ú2513647ET98Ú25189TE7463r_  Ú2546E981T73Ú25691T8E473Ú2569E8T1437Ú258T73E6149Ú258T9614E37Ú25T31496E87Ú25T89E61437Ú2618T497E35Ú26347ET9185Ú263891T7E45ri  Ú2653E718T49Ú2654T1783E9rk  Ú2654E3871T9rl  Ú2654E7T1983rm  Ú265819TE743Ú2659E8T1347Ú267431T8E95Ú2694T817E35Ú269T1783E45rr  Ú269E3871T45rs  Ú26E451T7389rt  Ú26E459817T3ru  Ú26E4T718953rv  Ú26E873T5149Ú26E95134T87Ú26E95178T43Ú274316E985Trz  Ú2743E86591TÚ274916E385Tr|  Ú2749586E31TÚ276134ET985Ú276143E9T85Ú27E34169T85Ú2965387E41Tr�  Ú296E387T145Ú29TE7436185Ú29TE7463158Ú29E7835641Tr…  Ú2E431T96587r†  Ú2E465387T19Ú2E637T85419Ú2E783T51469r‰  Ú2E796415T38Ú2E8T1956743Ú2E9658T4137Ú3142E8956T7Ú3142ET79685Ú31456T972E8Ú314672E9T85Ú3152689TE74r‘  Ú3152E9T8764Ú3158629TE74r“  Ú316452E98T7Ú317ET562894Ú317ET926854Ú317ET986254Ú319765T42E8Ú3198265TE74Ú31T524796E8Ú31T567942E8Ú31T7E294685Ú325E79T8164r�  Ú3265981TE74Ú329E71T4568rŸ  Ú32E981T6547Ú347621T8E95Ú3479TE26185Ú34T9E712568Ú35146T927E8r¤  Ú351T64927E8r¥  Ú351T7924E68Ú35216E98T74Ú3521T8E9674Ú3581629ET74Ú3594T6127E8Ú359E6128T74Ú35E7216T498Ú35E72946T18Ú35E729T6418Ú3625189TE74r¯  Ú36524ET8917Ú3674218T9E5Ú36T154927E8r²  Ú3764128T9E5Ú38297E5T164Ú38E729T6145Ú3T17E924568r¶  Ú3T4952E8617Ú3T6194527E8Ú3T62E815497Ú3T97E528164rº  Ú3E2418596T7Ú3E7T4926185Ú416352E7T98Ú41T629E7835r¾  Ú4328T56E917Ú4328TE65917Ú43T9E865217Ú463152E9T87Ú46529E8T137Ú46731T8E925Ú4692E513T87rÅ  Ú46982315ET7Ú469T315E287rÇ  Ú4769E251T38Ú4783T1629E5Ú47T198236E5Ú47E928361T5Ú4T1629E3785Ú4TE86592317Ú4E2538T1697Ú4E29658T317rÏ  Ú4ET85692317rÐ  Ú5896T142E37)îÚ25634Ú134E7rÓ  ÚE79T6Ú89E25Ú7E542Ú7E982Ú29658Ú856ETÚ8E65TÚE6853Ú8E729Ú729E8Ú982E7Ú927E8Ú8E63TÚ7E253Ú7T853Ú78356Ú783E6Ú58T73Ú358T7Ú2836EÚ2E638râ  Ú79T65Ú78352rÛ  Ú56ET8Ú42E69ÚE65T8Ú4952EÚ52E34Ú236E8Ú36E8TÚ3E685ÚT8E63Ú586E3ré  ró  Ú8E632Ú25E43Ú5E437Ú25E79Ú5E79TÚE4376ÚE7946Ú9TE74Ú479TEÚE7T49Ú734E5Ú34E52Ú87E25ÚE2594Ú352E7ÚT497EÚT97E5Ú97E52rà  ÚT7945Ú76538râ  Ú4763TÚ97425r
  ró  râ  Ú5E792Ú74259Ú52479Ú8352Er
  Ú4367TÚ43765Ú76598ÚE8659rô  Ú49765r  Ú6734EÚ21674Ú7634TÚ1T8E9ÚT9658Ú34T15Ú5189EÚ189E6Ú689E7Ú6E981ÚE9815Ú3T514Ú47ET9Ú25189rü  r  Ú91T8EÚ9E8T1rå  ÚT9614Ú5T314Ú89E61r  r   Ú891T7Ú1T7E4ÚE718TÚT1783Ú1783EÚE3871Ú3871TÚ4E7T1Ú7T198rü  r#  r  ÚT817Er*  r+  r,  r-  Ú451T7Ú1T738Ú59817Ú9817TÚT7189Ú71895r  Ú5134TÚ5178TÚ4316EÚ16E98r  Ú4916EÚ16E38rô  Ú6134EÚ27614Ú4169TÚ65387Ú5387EÚ6E387rü  rü  ÚE7835rã  ÚE431Tr  r@  Ú37T85Ú2E783r  Ú415T3ÚE8T19Ú9658TÚ3142ErJ  Ú56T97Ú31467Ú52689rü  Ú152E9Ú58629rü  Ú52E98Ú56289Ú92685Ú98625Ú765T4Ú98265r  Ú56794Ú31T7Erø  rù  Ú65981Ú29E71Ú9E71TÚ2E981r  rý  ÚT9E71Ú146T9rß  Ú1T649rß  Ú51T79r:  r  Ú1629EÚ94T61ÚE6128Ú16T49Ú946T1Ú9T641r!  rü  Ú36524Ú36742ÚT1549rß  Ú37641Ú297E5rÜ  ÚT17E9Ú17E92rî  Ú61945Ú15497r  r  Ú3E241rþ  r  Ú629E7rC  Ú8T56EÚ8TE65Ú9E865rN  r#  r  Ú2E513ÚE513TÚ2315EÚT315EÚ315E2Ú9E251r`  r/  Ú8361Tr`  r  ÚE2538rØ  rI  ÚT8569Ú85692Ú142E3)îr3   r2   r   r   r5   r4   r7   r6   r:   r9   r8   r1   r¯   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é    é!   r“  é"   é#   é$   é%   é&   r˜  é'   r™  é(   rš  é)   é*   é+   é,   é-   é.   r   é/   r¡  é0   é1   é2   r¤  é3   r¥  é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   éA   r³  éB   éC   éD   r¶  éE   éF   éG   éH   éI   éJ   éK   r½  éL   éM   r¿  éN   éO   éP   rÂ  éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   rÌ  é[   é\   rÎ  é]   rÏ  é^   rÐ  é_   é`   éa   éb   éc   rÕ  éd   rÖ  ée   r×  éf   rØ  ég   rÙ  éh   éi   éj   ék   rÝ  él   ém   rß  én   éo   ép   éq   ér   rä  és   ét   éu   év   rè  éw   ré  éx   éy   éz   rì  é{   é|   é}   é~   é   é€   é�   é‚   rô  éƒ   é„   rö  é…   é†   é‡   éˆ   é‰   éŠ   é‹   éŒ   é�   éŽ   r   é�   é�   r  é‘   é’   é“   é”   é•   r  é–   r  é—   é˜   é™   éš   é›   éœ   é�   éž   éŸ   é    r  é¡   é¢   é£   r  é¤   é¥   é¦   é§   r  é¨   é©   éª   é«   r  é¬   é­   é®   é¯   r!  é°   é±   é²   é³   é´   éµ   é¶   r(  é·   é¸   r*  é¹   éº   é»   é¼   é½   é¾   é¿   éÀ   r2  éÁ   r3  éÂ   Fz'A Link Chord must be a twelve-tone row.rË   r   rÌ   rÍ   N)r°   rŠ   r   r�   rŒ   r±   r   )r   ÚfullLinkIntervalsÚspecialLinkIntervalsÚlinkClassificationÚ	numChordsÚrowChecklistÚspecialIntervalsÚclassificationr…   Ú	intervalsr³   s              r   rî   z#TwelveToneRow.getLinkClassification  s[  € ðB;;ð ;;ð ;;Ððx" Kð " Kð " KÐðF*ð *ð *ÐõV Ð)Ñ*Ô*ˆ	à×ÒÑ!Ô! UÐ*Ð*Ý!Ð"KÑLÔLÐLàØ×7Ò7¸¸QÑ?Ô?Ø×7Ò7¸¸QÑ?Ô?Ø×7Ò7¸¸aÑ@Ô@ðBˆð ÐØˆØð 	Eð 	EˆCØ×0Ò0Ñ2Ô2ˆIÝ˜9Ñ%Ô%ð Eð E�Ø$ QÔ'¨9Ò4Ð4Ø%7¸Ô%:�NØ$×+Ò+Ð,@ÀÔ,CÑDÔDÐDøðEð  ð 	4Ø˜�8ˆOà!Ð#3Ð3Ð3r   c                óB   — |                       ¦   «         }|d         €dS dS )a_  
        Describes whether a :class:`~music21.serial.TwelveToneRow` is a Link Chord.

        >>> bergLyric = serial.getHistoricalRowByName('BergLyricSuite')
        >>> bergLyric.pitchClasses()
        [5, 4, 0, 9, 7, 2, 8, 1, 3, 6, 10, 11]
        >>> bergLyric.isAllInterval()
        True
        >>> bergLyric.isLinkChord()
        False
        >>> link = serial.pcToToneRow([0, 3, 8, 2, 10, 11, 9, 4, 1, 5, 7, 6])
        >>> link.isLinkChord()
        True
        >>> doubleLink = serial.pcToToneRow([0, 1, 8, 5, 7, 10, 4, 3, 11, 9, 2, 6])
        >>> doubleLink.isLinkChord()
        True
        r   NFT)rî   )r   Ú	linkTuples     r   rï   zTwelveToneRow.isLinkChordà  s)   € ð$ ×.Ò.Ñ0Ô0ˆ	Ø�QŒ<ÐØ�5à�4r   Ú
transType1r   Úindex1rÎ   Ú
transType2Úindex2c                ó`  — |                       ¦   «         du rt          d¦  «        ‚|                      ||¦  «        }|                      ||¦  «        }|                     ¦   «         }|                     ¦   «         }|dd…         |dd…         z   }	t	          |	¦  «                              ¦   «         S )aÍ  
        Describes whether two transformations of a twelve-tone row are combinatorial.

        The first and second arguments describe one transformation, while the third and fourth
        describe another.

        First, let's take a row we know to have a combinatoriality pair:

        >>> moses = serial.getHistoricalRowByName('SchoenbergMosesAron')
        >>> moses.pitchClasses()
        [9, 10, 4, 2, 3, 1, 7, 5, 6, 8, 11, 0]

        Combinatoriality holds here between P0 and I3

        >>> moses.areCombinatorial('P', 0, 'I', 3)
        True

        And a combinatorial pair like this between P0 and I3 will also hold
        if you modify both rows in the same way, e.g.
        if you transpose both by the same amount

        >>> moses.areCombinatorial('P', 1, 'I', 4)
        True

        or if you retrograde both

        >>> moses.areCombinatorial('R', 1, 'RI', 4)
        True

        Any modification made to one row form and not the other means all bets are off

        >>> moses.areCombinatorial('R', 6, 'RI', 4)
        False

        * Changed in v7: `convention` is no longer necessary and no longer used.
          Renamed to `unused_convention` and defaults None; to be removed in v8.
        Fz2Combinatoriality applies only to twelve-tone rows.Nr7   )rŠ   r   r�   rˆ   rÏ   )
r   r?  r@  rA  rB  Útrans1Útrans2Úpitches1Úpitches2ÚtestRows
             r   rð   zTwelveToneRow.areCombinatorialø  s­   € ðT ×ÒÑ!Ô! UÐ*Ð*Ý!Ð"VÑWÔWÐWð ×0Ò0°¸VÑDÔDˆØ×0Ò0°¸VÑDÔDˆà×&Ò&Ñ(Ô(ˆØ×&Ò&Ñ(Ô(ˆØ˜2˜A˜2”, ¨"¨1¨"¤Ñ-ˆå˜7Ñ#Ô#×3Ò3Ñ5Ô5Ð5r   N)r×   r  )
r?  r   r@  rÎ   rA  r   rB  rÎ   r×   r  )r   r   r   r,   rê   rì   r  r  rí   rî   rï   rð   r   r   r   r¶   r¶   ’  s³   € € € € € ðð ðNð Nð N€Jð.ð .ð .ð`ð ð ð("Wð "Wð "WðHð ð ð ð<4ð 4ð 4ðBð ð ð ð056ð 56ð 56ð 56ð 56ð 56r   r¶   c                  ó€   ‡ — e Zd ZU dZddddœZded<   dZd	ed
<   dZd	ed<   dZd	ed<   	 	 	 	 ddˆ fd„Z	ˆ fd„Z
d„ Zˆ xZS )ÚHistoricalTwelveToneRowz–
    Subclass of :class:`~music21.serial.TwelveToneRow` storing additional attributes of a
    twelve-tone row used in the historical literature.
    z,The name of the composer, or None.  (String)z(The opus of the work, or None.  (String)z)The title of the work, or None.  (String)©ÚcomposerÚopusÚtitler†   r‡   Nú
None | strrL  rM  rN  c                óf   •—  t          ¦   «         j        |fi |¤Ž || _        || _        || _        d S r›   )r)   r’   rL  rM  rN  )r   rL  rM  rN  r…   r–   r+   s         €r   r’   z HistoricalTwelveToneRow.__init__?  s=   ø€ ð 	�‰ŒÔ˜Ð)Ð) Ð)Ð)Ð)Ø ˆŒØˆŒ	ØˆŒ
ˆ
ˆ
r   c                óÀ   •— t          ¦   «                              |¦  «         t          |t          ¦  «        sd S |j        | _        |j        | _        |j        | _        d S r›   )r)   rû   r'   rJ  rL  rM  rN  )r   r¿   r+   s     €r   rû   z'HistoricalTwelveToneRow.mergeAttributesJ  sR   ø€ Ý‰Œ×Ò Ñ&Ô&Ð&Ý˜%Õ!8Ñ9Ô9ð 	ØˆFØœˆŒØ”JˆŒ	Ø”[ˆŒ
ˆ
ˆ
r   c                ó4   — | j         › d| j        › d| j        › �S )Nú rK  )r   s    r   r*   z%HistoricalTwelveToneRow._reprInternalR  s$   € Ø”-Ð:Ð: $¤)Ð:Ð:¨d¬jÐ:Ð:Ð:r   )NNNN)rL  rO  rM  rO  rN  rO  )r   r   r   r,   r‡   ré   rL  rM  rN  r’   rû   r*   r-   r.   s   @r   rJ  rJ  0  så   ø€ € € € € € ðð ð
 CØ:Ø<ð!ð !€Ið ð ð ñ ð €HÐÐÐÑØ€DÐÐÐÑØ€EÐÐÐÑð '+Ø"&Ø#'Øð		ð 	ð 	ð 	ð 	ð 	ð 	ð!ð !ð !ð !ð !ð;ð ;ð ;ð ;ð ;ð ;ð ;r   rJ  c                óâ   — |                       d¦  «        r
| dd…         } | t          v r9t          |          }t          |d         |d         |d         |d         ¦  «        }|S t          d¦  «        ‚)a	  
    Given the name referring to a twelve-tone row used in the historical literature,
    returns a :class:`~music21.serial.HistoricalTwelveToneRow` object with attributes
    describing the row.

    The names of the rows with stored attributes are below (each must be passed as a string,
    in single quotes).

    >>> for r in sorted(list(serial.historicalDict)):
    ...     print(r)
    BergChamberConcerto
    BergDerWein
    BergLulu
    BergLuluActIIScene1
    BergLuluActIScene20
    BergLyricSuite
    BergLyricSuitePerm
    BergViolinConcerto
    BergWozzeckPassacaglia
    SchoenbergFragOrganSonata
    SchoenbergFragPiano
    SchoenbergFragPianoPhantasia
    SchoenbergIsraelExists
    SchoenbergJakobsleiter
    SchoenbergMosesAron
    SchoenbergOp23No5
    SchoenbergOp24Mvmt4
    SchoenbergOp24Mvmt5
    SchoenbergOp25
    SchoenbergOp26
    SchoenbergOp27No1
    SchoenbergOp27No2
    SchoenbergOp27No3
    SchoenbergOp27No4
    SchoenbergOp28No1
    SchoenbergOp28No3
    SchoenbergOp29
    SchoenbergOp30
    SchoenbergOp31
    SchoenbergOp32
    SchoenbergOp33A
    SchoenbergOp33B
    SchoenbergOp34
    SchoenbergOp35No1
    SchoenbergOp35No2
    SchoenbergOp35No3
    SchoenbergOp35No5
    SchoenbergOp36
    SchoenbergOp37
    SchoenbergOp41
    SchoenbergOp42
    SchoenbergOp44
    SchoenbergOp45
    SchoenbergOp46
    SchoenbergOp47
    SchoenbergOp48No1
    SchoenbergOp48No2
    SchoenbergOp48No3
    SchoenbergOp50A
    SchoenbergOp50B
    SchoenbergOp50C
    WebernOp17No2
    WebernOp17No3
    WebernOp18No1
    WebernOp18No2
    WebernOp18No3
    WebernOp19No1
    WebernOp19No2
    WebernOp20
    WebernOp21
    WebernOp22
    WebernOp23
    WebernOp24
    WebernOp25
    WebernOp26
    WebernOp27
    WebernOp28
    WebernOp29
    WebernOp30
    WebernOp31
    WebernOpNo17No1

    >>> web = serial.getHistoricalRowByName('WebernOp29')
    >>> web.row
    [3, 11, 2, 1, 5, 4, 7, 6, 10, 9, 0, 8]
    >>> web.composer
    'Webern'
    >>> web.opus
    'Op. 29'
    >>> web.title
    'Cantata I'
    >>> web.isLinkChord()
    False

    NOTE: before v6, these rows had 'Row' in front of them,
    like 'RowWebernOp29' instead of 'WebernOp29'.  They can still be accessed
    by the old name.

    >>> rowWeb = serial.getHistoricalRowByName('RowWebernOp29')
    >>> rowWeb.row == web.row
    True
    ÚRowr   Nr   r3   r2   z'No historical row with given name found)rŸ   r  rJ  r   )ÚrowNameÚattrÚrowObjs      r   r  r  V  st   € ðN ×Ò˜%Ñ Ô ð Ø˜!˜"˜"”+ˆà•.Ð Ð Ý˜gÔ&ˆÝ(¨¨a¬°$°q´'¸4À¼7ÀDÈÄGÑLÔLˆØˆåÐGÑHÔHÐHr   c                óð   — t          | ¦  «        dk    rt          ¦   «         }nt          ¦   «         }| D ]B}t          j        ¦   «         }||j        _        d|j        _        |                     |¦  «         ŒC|S )a‚  
    A convenience function that, given a list of pitch classes represented as integers
    and turns it in to a :class:`~music21.serial.ToneRow` object.

    >>> chromaticRow = serial.pcToToneRow([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    >>> chromaticRow.show('text')
    {0.0} <music21.note.Note C>
    {1.0} <music21.note.Note C#>
    {2.0} <music21.note.Note D>
    {3.0} <music21.note.Note E->
    {4.0} <music21.note.Note E>
    {5.0} <music21.note.Note F>
    {6.0} <music21.note.Note F#>
    {7.0} <music21.note.Note G>
    {8.0} <music21.note.Note G#>
    {9.0} <music21.note.Note A>
    {10.0} <music21.note.Note B->
    {11.0} <music21.note.Note B>
    >>> matrixObj = chromaticRow.matrix()
    >>> print(matrixObj)
      0  1  2  3  4  5  6  7  8  9  A  B
      B  0  1  2  3  4  5  6  7  8  9  A
    ...

    >>> fancyRow = serial.pcToToneRow([4, 5, 0, 6, 7, 2, 'a', 8, 9, 1, 'b', 3])
    >>> matrixObj = fancyRow.matrix()
    >>> print(matrixObj)
      0  1  8  2  3  A  6  4  5  9  7  B
      B  0  7  1  2  9  5  3  4  8  6  A
    ...

    Note that the Row does not have to be a valid row to exist:

    >>> multiSetRow = serial.pcToToneRow([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
    >>> multiSetRow.pitchClasses()
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

    Or even have 12 notes:

    >>> shortRow = serial.pcToToneRow([3, 4])
    >>> shortRow.pitchClasses()
    [3, 4]

    If the row does have twelve notes (whether unique or not) the object returned
    is a `TwelveToneRow`:

    >>> multiSetRow
    <music21.serial.TwelveToneRow 111111111111>

    Otherwise, it is simply a `ToneRow`:

    >>> shortRow
    <music21.serial.ToneRow 34>
    r¯   N)	r°   r¶   r(   r   r”   r	   r¤   r•   r   )r¹   rº   r»   r#   s       r   rÏ   rÏ   Ê  sm   € õp ˆ5�z„z�RÒÐÝ‰OŒOˆˆå‰IŒIˆàð ð ˆÝŒI‰KŒKˆØ#ˆŒÔØˆŒŒØ	�Š�‰ŒˆˆØ€Hr   r¬   ú	list[int]r×   r   c                ó8  ‡ — d„ ‰ D ¦   «         }ˆ fd„|D ¦   «         }g }|D ]f}g }|D ]7}|                      t          |¦  «                             d¦  «        ¦  «         Œ8|                      d                     |¦  «        ¦  «         Œgd                     |¦  «        S )a0  
    Takes a list of numbers of converts it to a string representation of a
    12-tone matrix.

    >>> aMatrix = serial.rowToMatrix([0, 2, 11, 7, 8, 3, 9, 1, 4, 10, 6, 5])
    >>> print(aMatrix)
      0  2 11  7  8  3  9  1  4 10  6  5
     10  0  9  5  6  1  7 11  2  8  4  3
      1  3  0  8  9  4 10  2  5 11  7  6
      5  7  4  0  1  8  2  6  9  3 11 10
      4  6  3 11  0  7  1  5  8  2 10  9
      9 11  8  4  5  0  6 10  1  7  3  2
      3  5  2 10 11  6  0  4  7  1  9  8
     11  1 10  6  7  2  8  0  3  9  5  4
      8 10  7  3  4 11  5  9  0  6  2  1
      2  4  1  9 10  5 11  3  6  0  8  7
      6  8  5  1  2  9  3  7 10  4  0 11
      7  9  6  2  3 10  4  8 11  5  1  0

    This function survives today (2020) because it's been
    an example function for `music21` since the very first demonstrations
    of predecessors from around 2000 onwards.  Nowadays, better to create
    a `TwelveToneRow()` object and then get a matrix from that:

    >>> ttr = serial.TwelveToneRow([0, 2, 11, 7, 8, 3, 9, 1, 4, 10, 6, 5])
    >>> matrix = ttr.matrix()
    >>> print(matrix)
      0  2  B  7  8  3  9  1  4  A  6  5
      A  0  9  5  6  1  7  B  2  8  4  3
      1  3  0  8  9  4  A  2  5  B  7  6
      5  7  4  0  1  8  2  6  9  3  B  A
      4  6  3  B  0  7  1  5  8  2  A  9
      9  B  8  4  5  0  6  A  1  7  3  2
      3  5  2  A  B  6  0  4  7  1  9  8
      B  1  A  6  7  2  8  0  3  9  5  4
      8  A  7  3  4  B  5  9  0  6  2  1
      2  4  1  9  A  5  B  3  6  0  8  7
      6  8  5  1  2  9  3  7  A  4  0  B
      7  9  6  2  3  A  4  8  B  5  1  0
    c                ó   — g | ]
}d |z
  d z  ‘ŒS ró   r   rô   s     r   r¥   zrowToMatrix.<locals>.<listcomp>:  s    € Ð"Ð"Ð"˜1ˆ"ˆq‰&�B‰Ð"Ð"Ð"r   c                ó.   •‡— g | ]Šˆfd „‰D ¦   «         ‘ŒS )c                ó    •— g | ]
}|‰z   d z  ‘ŒS ró   r   rø   s     €r   r¥   z*rowToMatrix.<locals>.<listcomp>.<listcomp>;  s"   ø€ Ð+Ð+Ð+ A��E‘	˜RÑÐ+Ð+Ð+r   r   )r�   rù   r¬   s    @€r   r¥   zrowToMatrix.<locals>.<listcomp>;  s/   øø€ Ð;Ð;Ð;°Ð+Ð+Ð+Ð+¨Ð+Ñ+Ô+Ð;Ð;Ð;r   r   r   r   )r   r   r   r   )r¬   r³   rì   r    r…   r"   ÚthisPCs   `      r   ÚrowToMatrixr`    s²   ø€ ðV 	#Ð" Ð"Ñ"Ô"€AØ;Ð;Ð;Ð;¸Ð;Ñ;Ô;€Fà
€CØð !ð !ˆØˆØð 	-ð 	-ˆFØ�JŠJ•s˜6‘{”{×(Ò(¨Ñ+Ô+Ñ,Ô,Ð,Ð,Ø�
Š
�2—7’7˜3‘<”<Ñ Ô Ð Ð à�9Š9�S‰>Œ>Ðr   c                  ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestc                óþ   — t          d¦  «        }|                      d„ |D ¦   «         g d¢¦  «         t          d¦  «                             ¦   «         }|d         }|                      d„ |D ¦   «         g d¢¦  «         d S )Nry   c                ó   — g | ]	}|j         ‘Œ
S r   r©   r«   s     r   r¥   z#Test.testMatrix.<locals>.<listcomp>L  s   € Ð.Ð.Ð. Q˜!œ&Ð.Ð.Ð.r   )ÚDúC#ÚAúB-ÚFúE-rÄ   ÚCúG#ÚGúF#ÚBr   c                ó   — g | ]	}|j         ‘Œ
S r   r©   )r�   Úes     r   r¥   z#Test.testMatrix.<locals>.<listcomp>P  s   € Ð-Ð-Ð- Q˜!œ&Ð-Ð-Ð-r   )rk  ro  rm  rl  rj  rf  re  rh  rn  ri  rÄ   rg  )r  ÚassertEqualrì   )r   ÚsrcÚs37Úr0s       r   Ú
testMatrixzTest.testMatrixJ  s©   € Ý$Ð%5Ñ6Ô6ˆØ×ÒÐ.Ð.¨#Ð.Ñ.Ô.ØZÐZÐZñ	\ô 	\ð 	\å$Ð%5Ñ6Ô6×=Ò=Ñ?Ô?ˆØ�ŒVˆØ×ÒÐ-Ð-¨"Ð-Ñ-Ô-ØZÐZÐZñ	\ô 	\ð 	\ð 	\ð 	\r   c                óÖ  — ddl m} ddddddd	d
dddddœ}|                     d¦  «        }|                     ¦   «         j        D ]I}|D ]D}|j        j        t          j        |¦  «        j        k    r|                     ||         ¦  «         ŒEŒJg }|j	        d                              ¦   «         j        D ]}| 
                    |j        ¦  «         Œ|                      |g d¢¦  «         d S )Nr   )Úcorpusr3   r2   r   r5   r4   r7   r6   r:   r9   r8   r1   r¯   )rº   zg-Úgza-Úfze-rq  ÚdÚczc#zb-Úbzbwv66.6)%Ú10Ú12Ú1r  r~  Ú7r~  r  r€  r~  r€  r  Ú4Ú2r€  r  r  rƒ  r�  r€  r  r~  r~  r€  r  r~  r€  r‚  rƒ  r‚  rƒ  rƒ  rƒ  rƒ  rƒ  Ú5rƒ  )Úmusic21rx  ÚparseÚflattenÚnotesr	   r¤   r“   ÚaddLyricÚpartsr   Úlyricrr  )r   rx  ÚseriesÚsr#   ÚkeyÚmatchs          r   ÚtestLabelingAzTest.testLabelingAS  s%  € Ø"Ð"Ð"Ð"Ð"Ð"Ø ¨°Ø ¨°Ø ¨"°2ð7ð 7ˆð �LŠL˜Ñ#Ô#ˆØ—’‘”Ô"ð 	,ð 	,ˆAØð ,ð ,�Ø”7Ô%­¬°SÑ)9Ô)9Ô)DÒDÐDØ—J’J˜v cœ{Ñ+Ô+Ð+øð,ð ˆØ”˜”×#Ò#Ñ%Ô%Ô+ð 	"ð 	"ˆAØ�LŠL˜œÑ!Ô!Ð!Ð!Ø×Ò˜ð !5ð !5ð !5ñ 	6ô 	6ð 	6ð 	6ð 	6r   c                óº   — g }t           D ]:}t          |¦  «                             ¦   «         du r|                     |¦  «         Œ;|                      |g ¦  «         d S )NF)r  r  rŠ   r   rr  )r   ÚnonRowsr  s      r   ÚtestHistoricalzTest.testHistoricalf  sd   € ØˆÝ+ð 	.ð 	.ˆMÝ% mÑ4Ô4×DÒDÑFÔFÈ%ÐOÐOØ—’˜}Ñ-Ô-Ð-øØ×Ò˜ "Ñ%Ô%Ð%Ð%Ð%r   c                ó8   — t          d¦  «        }|dd…         }dS )z)
        Was a problem in slices
        rd   r   r   N)r  )r   ÚaRowÚunused_aRow2s      r   ÚtestExtractRowPartszTest.testExtractRowPartsm  s#   € õ &Ð&:Ñ;Ô;ˆØ˜A˜a˜C”yˆˆˆr   c                óF  — t          d¦  «        }t          j        ¦   «         }t          ddd¦  «        D ]l}|||dz   …         }t	          j        |¦  «        }|                     |j        ¦  «         |                     |j        ¦  «         | 	                    |¦  «         Œmd S )Nrd   r   r¯   r   )
r  r
   ÚStreamr±   r   ÚChordr‰  ÚprimeFormStringÚ
forteClassr   )r   r•  ÚbStreamr³   ÚaRow2r|  s         r   ÚtestPostTonalDocszTest.testPostTonalDocst  sœ   € Ý%Ð&:Ñ;Ô;ˆå”-‘/”/ˆÝ�q˜"˜a‘”ð 	ð 	ˆAØ˜˜1˜q™5˜”MˆEÝ”˜EÑ"Ô"ˆAØ�JŠJ�qÔ(Ñ)Ô)Ð)Ø�JŠJ�q”|Ñ$Ô$Ð$Ø�NŠN˜1ÑÔÐÐð	ð 	r   c                óB   — ddl m}  || t          ¦   «         ¦  «         d S )Nr   )ÚtestCopyAll)Úmusic21.test.commonTestr¡  Úglobals)r   r¡  s     r   ÚtestCopyAndDeepcopyzTest.testCopyAndDeepcopy  s0   € Ø7Ð7Ð7Ð7Ð7Ð7Øˆ�D�'™)œ)Ñ$Ô$Ð$Ð$Ð$r   N)	r   r   r   rv  r�  r“  r—  rŸ  r¤  r   r   r   rb  rb  H  sq   € € € € € ð\ð \ð \ð6ð 6ð 6ð&&ð &ð &ð!ð !ð !ð	ð 	ð 	ð%ð %ð %ð %ð %r   rb  Ú__main__)r¬   rZ  r×   r   )r,   Ú
__future__r   ÚtypingÚtÚunittestr…  r   r   r   r   r	   r
   ÚEnvironmentÚenvironLocalÚMusic21Exceptionr   r™  r   r  r(   r¶   rJ  r  rÏ   r`  ÚTestCaserb  rê   r   ÚmainTestr   r   r   ú<module>r¯     s  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à&ˆ{Ô& xÑ0Ô0€ð	ð 	ð 	ð 	ð 	�lÔ3ñ 	ô 	ð 	ð
7+ð 7+ð 7+ð 7+ð 7+�v”}ñ 7+ô 7+ð 7+ðxSØ�8˜X {Ø>Ð>Ð>ð@ðSð �8˜XÐ'7Ø>Ð>Ð>ð@ðSð
 ˜L¨(Ð4SØ!GÐ!GÐ!GðIðSð ˜L¨(Ð4PØ!GÐ!GÐ!GðIðSð ˜|¨TÐ3EØ$JÐ$JÐ$JðLðSð ˜,¨Ð8]ØEÐEÐEðGðSð �8˜X }Ø>Ð>Ð>ð@ðSð ˜FÐ$;Ø!SØ!GÐ!GÐ!GðIðSð$ ˜,¨Ð8]ØEÐEÐEðGð%Sð( ˜FÐ$<Ø!SØ!GÐ!GÐ!GðIð)Sð. ˜,¨Ð8]ØEÐEÐEðGð/Sð2 ˜,¨Ð8]ØEÐEÐEðGð3Sð6 ˜L¨$Ð0DØ!GÐ!GÐ!GðIð7Sð: ˜ i°ØCÐCÐCðEð;Sð> ˜ iÐ1QØCÐCÐCðEð?SðB ˜ iÐ1OØCÐCÐCðEðCSðF ˜L¨$Ð0@Ø!GÐ!GÐ!GðIðGSð SðJ �8˜X }Ø>Ð>Ð>ð@ðKSðN ˜,¨Ð9LØEÐEÐEðGðOSðR ˜,¨ØFØEÐEÐEðGðSSðX ˜,¨ØFØEÐEÐEðGðYSð^ �8˜XÐ'9Ø>Ð>Ð>ð@ð_Sðb ˜|¨TÐ3HØ$JÐ$JÐ$JðLðcSðf ˜,¨Ð2UØEÐEÐEðGðgSðj ˜,¨Ð2UØEÐEÐEðGðkSðn ˜,¨Ð2UØEÐEÐEðGðoSðr ˜,¨Ð2SØEÐEÐEðGðsSðv ˜,¨Ð2UØEÐEÐEðGðwSðz �| X¨wØBÐBÐBðDð{Sð~ ˜6 4Ð)MØ FÐ FÐ FðHðSðB �8˜X }Ø>Ð>Ð>ð@ðCSðF �| XÐ/GØBÐBÐBðDðGSðJ   ,°Ð6TØ'MÐ'MÐ'Mð"OðKSðN �| XÐ/RØBÐBÐBðDðOSð Sð SðR �| X¨}ØBÐBÐBðDðSSðV ˜ iÐ1JØCÐCÐCðEðWSðZ �| WÐ.?ØBÐBÐBðDð[Sð^ �| X¨~ØBÐBÐBðDð_Sðb ˜ iÐ1JØCÐCÐCðEðcSðf ˜6 4Ð)LØ FÐ FÐ FðHðgSðj �8˜XÐ'[Ø>Ð>Ð>ð@ðkSðn �˜Ð2Ø>Ð>Ð>ð@ðoSðr �8˜XÐ'AØ>Ð>Ð>ð@ðsSðv �8˜X |Ø>Ð>Ð>ð@ðwSðz ˜ /Ð3GØCÐCÐCðEð{Sð~ �8˜XÐ'FØ>Ð>Ð>ð@ðSðB ˜,¨Ð2MØEÐEÐEðGðCSðF �8˜XÐ'=Ø>Ð>Ð>ð@ðGSðJ �| XÐ/MØBÐBÐBðDðKSðN �h Ð1EØAÐAÐAðCðOSðR �h Ð1EØAÐAÐAðCðSSð Sð SðV �8˜XÐ'7Ø>Ð>Ð>ð@ðWSðZ # \°4Ð9ZØ*PÐ*PÐ*Pð%Rð[Sð^ �F˜D *Ø?Ð?Ð?ðAð_Sðb ˜v tÐ-TØ$JÐ$JÐ$JðLðcSðf �h Ð1DØAÐAÐAðCðgSðj �h °ØAÐAÐAðCðkSðn �h Ð1IØAÐAÐAðCðoSðr �| XÐ/QØBÐBÐBðDðsSðv ˜,¨Ð2UØEÐEÐEðGðwSðz �| XÐ/FØBÐBÐBðDð{Sð~ �| XÐ/RØBÐBÐBðDðSðB �| XÐ/NØBÐBÐBðDðCSðF ˜F DÐ*<Ø!GÐ!GÐ!GðIðGSðJ �| XÐ/EØBÐBÐBðDðKSðN �| XÑ/IØBÑBÐBðDðOSñR �| XÑ/EØBÑBÐBðDðSSñV �v˜tÑ%>ØBÑBÐBðDðWSð SðZ $¡XÑ/@ØBÑBÐBðDà¡Ñ1RØAÑAÐAðCà¡Ñ1EØAÑAÐAðCñcSð Sð S€ðpQ"ð Q"ñ Q"ð Q"ñ Q"ˆfŒmñ Q"ô Q"ð Q"ðl[6ð [6ñ [6ð [6ñ [6�Gñ [6ô [6ð [6ð|#;ð #;ñ #;ð #;ñ #;˜mñ #;ô #;ð #;ñLoIð oIð oIñhBð Bð BñJ5ñ 5ð 5ð 5ðr9%ð 9%ñ 9%ð 9%ñ 9%ˆ8Ôñ 9%ô 9%ð 9%ðn �}Ð&=ØÐ+¨[Ð:Pð€
ð ‰zÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   