§
    ƒØjù� ã                  ób  — d Z ddlmZ ddlmZ ddlmZ ddlZddlZddl	Z	ddl
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 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	  ed¦  «        r ed¦  «        rdZndZn# e $ r dZY nw xY w[ G d„ d¦  «        Z! e!¦   «         Z"d„ Z#d„ Z$ G d„ d¦  «        Z% G d„ dej&        ¦  «        Z' G d„ d ej(        ¦  «        Z) G d!„ d"ej(        ¦  «        Z*e+d#k    rddlZ ej,        e)¦  «         dS dS )$zµ
music21 translates to Lilypond format and if Lilypond is installed on the
local computer, can automatically generate .pdf, .png, and .svg versions
of musical files using Lilypond.
é    )Úannotations)ÚOrderedDict)Ú	find_specN)Úclef)Úcommon)ÚSubConverter)Úcorpus)Úduration)Úenvironment)Úexceptions21©Úkey)Únote)Ústream)Úvariant)ÚlilyObjectszlily.translatez	PIL.ImagezPIL.ImageOpsFTc                  ó   — e Zd ZU i Zded<   dS )Ú_sharedCorpusTestObjectzdict[str, stream.Stream]ÚsharedCacheN)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__© ó    ú‹/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/lily/translate.pyr   r   6   s#   € € € € € € Ø,.€KÐ.Ð.Ð.Ñ.Ð.Ð.r   r   c                ó„   — | t           j        vr!t          j        | ¦  «        t           j        | <   t           j        |          S ©N)ÚsharedCacheObjectr   r	   Úparse)ÚkeyNames    r   Ú_getCachedCorpusFiler"   =   s7   € àÕ'Ô3Ð3Ð3Ý17´¸gÑ1FÔ1FÕÔ% gÑ.ÝÔ(¨Ô1Ð1r   c                ó¨   — t          | ¦  «        } d}| D ]=}|                     ¦   «         s"t          t          |¦  «        dz  dz   ¦  «        }||z  }Œ>|S )zÕ
        Takes an id and makes it purely letters by substituting
        letters for all other characters.

        >>> print(lily.translate.makeLettersOnlyId('rainbow123@@dfas'))
        rainbowxyzmmdfas
        Ú é   éa   )ÚstrÚisalphaÚchrÚord)ÚinputStringÚreturnStringÚcs      r   ÚmakeLettersOnlyIdr.   F   sc   € õ �kÑ"Ô"€KØ€LØð ð ˆØ�yŠy‰{Œ{ð 	&Ý•C˜‘F”F˜R‘K "Ñ$Ñ%Ô%ˆAØ˜ÑˆˆàÐr   c                  óš  — e Zd Zd                     ¦   «         Zd                     ¦   «         Zd                     ¦   «         Zd                     ¦   «         Zd                     ¦   «         Zd                     ¦   «         Z	ddd	d
dddddœZ
dddddddddddddœZd„ Zd„ Zd„ Zd „ Zd!„ Zd"„ Zd#„ ZdVd&„ZdVd'„Zd(„ Zd)„ ZdWd*„ZdXd+„ZdYd-„Zd.„ ZdXd/„Z	 	 	 dZd0„Zd1„ Zd2„ Zd3„ Zd4„ Z d5„ Z!d6„ Z"d7„ Z#d8„ Z$d9„ Z%d:„ Z&d;„ Z'd<„ Z(d[d?„Z)d@„ Z*dA„ Z+dB„ Z,dC„ Z-dD„ Z.dE„ Z/d\dG„Z0	 	 d\dH„Z1	 d]dI„Z2dJ„ Z3d^dK„Z4d]dL„Z5dM„ Z6d_dN„Z7	 	 d`dO„Z8dXdP„Z9dQ„ Z:dXdR„Z;dS„ Z<dXdT„Z=dXdU„Z>d$S )aÚLilypondConverterzi
    ficta = #(define-music-function (parser location) () #{ \once \set suggestAccidentals = ##t #})
    a;  
    color = #(define-music-function (parser location color) (string?) #{
        \once \override NoteHead.color = #(x11-color color)
        \once \override Stem.color = #(x11-color color)
        \once \override Rest.color = #(x11-color color)
        \once \override Beam.color = #(x11-color color)
     #})
    z§
    \paper { #(define dump-extents #t)
    indent = 0\mm
    force-assignment = #""
    oddFooterMarkup=##f
    oddHeaderMarkup=##f
    bookTitleMarkup=##f
    }
    zT
     \override Rest.transparent  = ##t
     \override Dots.transparent  = ##t
     zF
     \revert Rest #'transparent
     \revert Dots #'transparent
     z.
    \include "lilypond-book-preamble.ly"
    ÚisisÚesesÚisihÚesehÚisÚesÚihÚeh)zdouble-sharpzdouble-flatzone-and-a-half-sharpzone-and-a-half-flatÚsharpÚflatz
half-sharpz	half-flatú|ú:Údashedú.z||z|.z.|z.|.z|:z:|ú'r$   )ÚregularÚdottedr=   ÚheavyÚdoubleÚfinalzheavy-lightzheavy-heavyzstart-repeatz
end-repeatÚtickÚnonec                óh  — d| _         d| _        d| _        d| _        d| _        d| _        d| _        t          j        ¦   «         | _	        |  
                    ¦   «          | j	        | _        g | _        g | _        d | _        g | _        g d¢| _        d| _        d| _        d | _        d | _        d | _        d S )	NÚ1Ú0z1.0Úpsr$   ú
--backend=)ÚblueÚredÚpurpleÚgreenÚorangeÚyellowÚgreyF)ÚmajorVersionÚminorVersionÚversionStringÚbackendÚversionSchemeÚheaderSchemeÚbackendStringÚlyoÚLyLilypondTopÚtopLevelObjectÚ
setupToolsÚcontextÚstoredContextsÚdoNotOutputÚcurrentMeasureÚaddedVariantsÚvariantColorsÚcoloredVariantsÚvariantModeÚLILYEXECÚtempNameÚinWord©Úselfs    r   Ú__init__zLilypondConverter.__init__˜   s»   € ØˆÔØˆÔØ"ˆÔØˆŒØˆÔØˆÔØ)ˆÔå!Ô/Ñ1Ô1ˆÔØ�ŠÑÔÐØÔ*ˆŒØ ˆÔØˆÔØ"ˆÔØˆÔØ[Ð[Ð[ˆÔØ$ˆÔØ ˆÔØˆŒØˆŒØˆŒˆˆr   c                óf  — t           d         }|�$|                     ¦   «         rt          |¦  «        }nöt          j        ¦   «         }|dk    r$d}t
          j                             |¦  «        sd}n¹|dk    ret
          j                             d¦  «        rFd}t
          j                             |¦  «        s$t
          j                             |dz   ¦  «        sd}nN|dk    rFd	}t
          j                             |¦  «        s$t
          j                             |dz   ¦  «        sd}nd}|| _        |S )
NÚlilypondPathÚdarwinz:/Applications/Lilypond.app/Contents/Resources/bin/lilypondÚlilypondÚwinzc:/Program Files (x86)z2c:/Program\ Files\ (x86)/lilypond/usr/bin/lilypondz.exez+c:/Program\ Files/lilypond/usr/bin/lilypond)ÚenvironLocalÚexistsr'   r   ÚgetPlatformÚosÚpathrf   )rj   ÚlpEnvironmentrf   Úplatforms       r   ÚfindLilyExeczLilypondConverter.findLilyExec¯   s  € Ý$ ^Ô4ˆØÐ$¨×)=Ò)=Ñ)?Ô)?Ð$Ý˜=Ñ)Ô)ˆHˆHåÔ)Ñ+Ô+ˆHØ˜8Ò#Ð#ØW�Ý”w—~’~ hÑ/Ô/ð *Ø)�HøØ˜UÒ"Ð"¥r¤w§~¢~Ð6NÑ'OÔ'OÐ"ØP�Ý”w—~’~ hÑ/Ô/ð *½¼¿ºÀxÐRXÑGXÑ8YÔ8Yð *Ø)�HøØ˜UÒ"Ð"ØI�Ý”w—~’~ hÑ/Ô/ð *½¼¿ºÀxÐRXÑGXÑ8YÔ8Yð *Ø)�Høà%�à ˆŒØˆr   c                óô  — |                       ¦   «         }|dg}t          j        ¦   «         }|dk    rt          j        nd}	 t          j        |t          j        |¬¦  «        5 }|                     ¦   «         \  }}|                     d¬¦  «        }| 	                    ¦   «         d         }| 	                    d¦  «        }	d d d ¦  «         n# 1 swxY w Y   n"# t          $ r}
t          d	¦  «        |
‚d }
~
ww xY w|	d         | _        |	d
         | _        | j        j        dz   | j                             t#          | j        ¦  «        dz   t#          | j        ¦  «        z   ¦  «        z   | _        t'          j        | j        ¦  «        | _        t'          j        | j        ¦  «        | _        d| _        t3          | j        ¦  «        dk    r*t3          | j        ¦  «        dk    r	d| _        d S d| _        d S d| _        d S )Nz	--versionrp   r   )ÚstdoutÚcreationflagsúutf-8©Úencodingé   r>   z¤Cannot find a copy of Lilypond installed on your system. Please be sure it is installed. And that your environment.UserSettings()['lilypondPath'] is set to find it.é   zversion rJ   é   z
-dbackend=rK   )rx   r   rs   Ú
subprocessÚCREATE_NO_WINDOWÚPopenÚPIPEÚcommunicateÚdecodeÚsplitÚOSErrorÚLilyTranslateExceptionrS   rT   r\   Ú	backslashÚquoteStringr'   rU   rZ   ÚLyEmbeddedScmrW   Ú
bookHeaderrX   rV   ÚintrY   )rj   rf   Úcommandrw   Úcreation_flagsÚprocrz   ÚunusedrU   ÚversionPiecesÚexcs              r   r]   zLilypondConverter.setupToolsÇ   sZ  € Ø×$Ò$Ñ&Ô&ˆØ˜[Ð)ˆÝÔ%Ñ'Ô'ˆØ8@ÀEÒ8IÐ8I�Ô4Ð4Èqˆð	\ÝÔ! 'µ*´/Ø0>ð@ñ @ô @ð 9ØCGØ!%×!1Ò!1Ñ!3Ô!3‘�˜ØŸš°˜Ñ8Ô8�Ø &§¢¡¤¨qÔ 1�Ø -× 3Ò 3°CÑ 8Ô 8�ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9øøõ ð 	\ð 	\ð 	\Ý(ðRñSô Sð Y\ð\øøøøð	\øøøð *¨!Ô,ˆÔØ)¨!Ô,ˆÔà"Ô1Ô;Ø *ñ+à $Ô 3× ?Ò ?ÅÀDÔDUÑ@VÔ@VØBEñAFåBEÀdÔFWÑBXÔBXñAYñ !Zô !ZñZˆÔõ
 !Ô.¨tÔ/AÑBÔBˆÔÝÔ-¨d¬oÑ>Ô>ˆÔàˆŒåˆtÔ Ñ!Ô! QÒ&Ð&Ý�4Ô$Ñ%Ô%¨Ò+Ð+Ø%1�Ô"Ð"Ð"à%1�Ô"Ð"Ð"à!-ˆDÔÐÐs=   Á!C Á"ACÂ?C ÃCÃC ÃCÃC Ã
C6Ã!C1Ã1C6c                óR   — | j                              | j        ¦  «         || _        d S r   )r_   Úappendr^   )rj   Ú
newContexts     r   r˜   zLilypondConverter.newContextð   s&   € ØÔ×"Ò" 4¤<Ñ0Ô0Ð0Ø!ˆŒˆˆr   c                ó~   — 	 | j                              ¦   «         | _        d S # t          $ r | j        | _        Y d S w xY wr   )r_   Úpopr^   Ú
IndexErrorr\   ri   s    r   ÚrestoreContextz LilypondConverter.restoreContextô   sL   € ð	/ØÔ.×2Ò2Ñ4Ô4ˆDŒLˆLˆLøÝð 	/ð 	/ð 	/ØÔ.ˆDŒLˆLˆLˆLð	/øøøs   ‚" ¢<»<c                ó¨   — |                       |¦  «         t          | j        ¦  «        }t          j        dd|¦  «                             ¦   «         }|S )a  
        get a proper lilypond text file for writing from a music21 object

        >>> n = note.Note()
        >>> print(lily.translate.LilypondConverter().textFromMusic21Object(n))
        \version "2..."
        \include "lilypond-book-preamble.ly"
        color = #(define-music-function (parser location color) (string?) #{
                \once \override NoteHead.color = #(x11-color color)
                \once \override Stem.color = #(x11-color color)
                \once \override Rest.color = #(x11-color color)
                \once \override Beam.color = #(x11-color color)
             #})
        \header { }
        \score  {
              << \new Staff  = ... { c' 4
                      }
                >>
          }
        \paper { }
        ...
        z
\s*\n\s*\nú
)ÚloadFromMusic21Objectr'   r\   ÚreÚsubÚstrip)rj   Úm21ObjectInÚss      r   ÚtextFromMusic21Objectz'LilypondConverter.textFromMusic21Objectü   sL   € ð. 	×"Ò" ;Ñ/Ô/Ð/Ý�Ô#Ñ$Ô$ˆÝŒF�= $¨Ñ*Ô*×0Ò0Ñ2Ô2ˆØˆr   c                ó  — |j         }d|v r<|t          j                 r*t          j        |d¬¦  «        }t          j        |¦  «         d|vsd|v sd|v rkt          j        ¦   «         }t          j        ¦   «         }|                     d|¦  «         |                     d|¦  «         |  	                    |d¬¦  «         dS d	|v rBt          j        ¦   «         }|                     d|¦  «         |  	                    |d¬¦  «         dS d
|v r|  	                    |d¬¦  «         dS d|v r|  
                    |d¬¦  «         dS t          j        ¦   «         }|                     d|¦  «         |  	                    |d¬¦  «         dS )zà
        Create a Lilypond object hierarchy in self.topLevelObject from an
        arbitrary music21 object.

        TODO: make lilypond automatically run makeNotation.makeTupletBrackets(s)
        TODO: Add tests.
        ÚStreamT)ÚrecurseÚMeasureÚVoicer   F©ÚmakeNotationÚPartÚScoreÚOpusN)Úclassesr   ÚVariantÚmakeAllVariantsReplacementsÚmakeVariantBlocksr   r®   r­   ÚinsertÚloadObjectFromScoreÚloadObjectFromOpus)rj   r£   r-   ÚscoreObjÚpartObjs        r   rŸ   z'LilypondConverter.loadFromMusic21Object  s˜  € ð ÔˆØ�qˆ=ˆ=Ø�7œ?Ô+ð 7å%ÔAÀ+ÐW[Ð\Ñ\Ô\�ÝÔ)¨+Ñ6Ô6Ð6à˜AÐÐ 9° > >°wÀ!°|°|Ý”|‘~”~ˆHÝ”k‘m”mˆGà�NŠN˜1˜kÑ*Ô*Ð*Ø�OŠO˜A˜wÑ'Ô'Ð'Ø×$Ò$ X¸EÐ$ÑBÔBÐBÐBÐBØ�qˆ[ˆ[Ý”|‘~”~ˆHØ�OŠO˜A˜{Ñ+Ô+Ð+Ø×$Ò$ X¸EÐ$ÑBÔBÐBÐBÐBØ˜ˆ\ˆ\Ø×$Ò$ [¸uÐ$ÑEÔEÐEÐEÐEØ�qˆ[ˆ[Ø×#Ò# K¸eÐ#ÑDÔDÐDÐDÐDå”|‘~”~ˆHØ�OŠO˜A˜{Ñ+Ô+Ð+Ø×$Ò$ X¸EÐ$ÑBÔBÐBÐBÐBr   NTc                ó  — g }| j         }| j        }t          j        | j        ¦  «        }|                     |¦  «         |                     |¦  «         |                     |¦  «         |j        D ]‘}|du r|                     d¬¦  «        }t          j        ¦   «         }|  	                    |¦  «        }	|j
        �|                      |j
        |¬¦  «         |                     |¦  «         |                     |	¦  «         Œ’t          j        d¬¦  «        }
t          j        |
¬¦  «        }t          j        |¬	¦  «        }|                     |¦  «         t          j        ¦   «         }|                     |¦  «         || j        _        dS )
aÃ  
        creates a filled topLevelObject (lily.lilyObjects.LyLilypondTop)
        whose string representation accurately reflects all the Score objects
        in this Opus object.

        >>> #_DOCS_SHOW fifeOpus = corpus.parse('miscFolk/americanfifeopus.abc')
        >>> #_DOCS_SHOW lpc = lily.translate.LilypondConverter()
        >>> #_DOCS_SHOW lpc.loadObjectFromOpus(fifeOpus, makeNotation=False)
        >>> #_DOCS_SHOW lpc.showPDF()
        TF©ÚinPlaceN©ÚlpHeaderÚpaper©ÚdefType©ÚoutputDefHead©ÚoutputDefBody)rW   rX   rZ   r�   ÚcolorDefr—   Úscoresr¬   ÚLyLilypondHeaderÚlyScoreBlockFromScoreÚmetadataÚsetHeaderFromMetadataÚLyOutputDefHeadÚLyOutputDefBodyÚLyOutputDefÚLyLayoutr^   Úcontents)rj   ÚopusInr¬   rÏ   ÚlpVersionSchemeÚlpHeaderSchemeÚlpColorSchemeÚ	thisScorer½   ÚlpScoreBlockÚlpOutputDefHeadÚlpOutputDefBodyÚlpOutputDefÚlpLayouts                 r   r¶   z$LilypondConverter.loadObjectFromOpus<  sw  € ð ˆØÔ,ˆØÔ*ˆÝÔ)¨$¬-Ñ8Ô8ˆØ�Š˜Ñ(Ô(Ð(Ø�Š˜Ñ'Ô'Ð'Ø�Š˜Ñ&Ô&Ð&àœð 
	*ð 
	*ˆIØ˜tÐ#Ð#Ø%×2Ò2¸5Ð2ÑAÔA�	åÔ+Ñ-Ô-ˆHØ×5Ò5°iÑ@Ô@ˆLØÔ!Ð-Ø×*Ò*¨9Ô+=ÈÐ*ÑQÔQÐQà�OŠO˜HÑ%Ô%Ð%Ø�OŠO˜LÑ)Ô)Ð)Ð)åÔ-°gÐ>Ñ>Ô>ˆÝÔ-¸OÐLÑLÔLˆÝ”o°OÐDÑDÔDˆØ�Š˜Ñ$Ô$Ð$å”<‘>”>ˆà�Š˜Ñ!Ô!Ð!à (ˆŒÔÐÐr   c                óì  — |du r|                      d¬¦  «        }| j        }| j        }t          j        | j        ¦  «        }t          j        ¦   «         }|                      |¦  «        }t          j        d¬¦  «        }t          j	        |¬¦  «        }	t          j
        |	¬¦  «        }
t          j        ¦   «         }||||||
|g}|j        �|                      |j        |¬	¦  «         || j        _        dS )
a„  

        creates a filled topLevelObject (lily.lilyObjects.LyLilypondTop)
        whose string representation accurately reflects this Score object.

        >>> lpc = lily.translate.LilypondConverter()
        >>> #_DOCS_SHOW b = corpus.parse('bach/bwv66.6')
        >>> b = lily.translate._getCachedCorpusFile('bach/bwv66.6') #_DOCS_HIDE
        >>> lpc.loadObjectFromScore(b)
        TFrº   r¾   r¿   rÁ   rÃ   Nr¼   )r¬   rW   rX   rZ   r�   rÅ   rÇ   rÈ   rË   rÌ   rÍ   rÎ   rÉ   rÊ   r^   rÏ   )rj   ÚscoreInr¬   rÑ   rÒ   rÓ   r½   rÕ   rÖ   r×   rØ   rÙ   rÏ   s                r   rµ   z%LilypondConverter.loadObjectFromScoref  sü   € ð ˜4ÐÐØ×*Ò*°5Ð*Ñ9Ô9ˆGàÔ,ˆØÔ*ˆÝÔ)¨$¬-Ñ8Ô8ˆÝÔ'Ñ)Ô)ˆð ×1Ò1°'Ñ:Ô:ˆåÔ-°gÐ>Ñ>Ô>ˆÝÔ-¸OÐLÑLÔLˆÝ”o°OÐDÑDÔDˆÝ”<‘>”>ˆØ# ^°]Ø˜l¨K¸ðCˆð ÔÐ'Ø×&Ò& wÔ'7À(Ð&ÑKÔKÐKà (ˆŒÔÐÐr   c                ó>  — t          j        ¦   «         }|                      |¦  «         t          |d¦  «        ru|                     ¦   «         j        r\|t          j                 r-|                      |¦  «        }|  	                    ||¬¦  «        }n|  	                    |¦  «        }||_
        n|                      |¦  «        }||_        t          j        |¬¦  «        }t          j        |¬¦  «        }t          j        |¬¦  «        }|                      ¦   «          |S )NÚparts)Ú	scoreInit©ÚcompositeMusic)Úmusic)Ú	scoreBody)rZ   ÚLyCompositeMusicr˜   ÚhasattrÚiterrÝ   r   r±   ÚlyPartsAndOssiaInitFromScoreÚ$lyGroupedMusicListFromScoreWithPartsÚgroupedMusicListÚ lyPrefixCompositeMusicFromStreamÚprefixCompositeMusicÚLyMusicÚLyScoreBodyÚLyScoreBlockrœ   )	rj   rÛ   ÚlpCompositeMusicÚlpPartsAndOssiaInitÚlpGroupedMusicListÚlpPrefixCompositeMusicÚlpMusicÚlpScoreBodyrÕ   s	            r   rÈ   z'LilypondConverter.lyScoreBlockFromScore‰  s&  € åÔ/Ñ1Ô1ÐØ�ŠÐ(Ñ)Ô)Ð)õ �7˜GÑ$Ô$ð 	K¨¯ª©¬Ô)=ð 	KØ•w”Ô'ð XØ&*×&GÒ&GÈÑ&PÔ&PÐ#Ø%)×%NÒ%NØØ1ð &Oñ &3ô &3Ð"Ð"ð &*×%NÒ%NÈwÑ%WÔ%WÐ"Ø0BÐÔ-Ð-ð &*×%JÒ%JÈ7Ñ%SÔ%SÐ"Ø4JÐÔ1å”+Ð-=Ð>Ñ>Ô>ˆÝ”o¨GÐ4Ñ4Ô4ˆÝÔ'°+Ð>Ñ>Ô>ˆØ×ÒÑÔÐàÐr   c                óú  — t          j        ¦   «         }g }d}|j        D �]S}t          |j        ¦  «        }t          j        |¦  «        }|                      |¦  «        }t          j        d|d||z  ¬¦  «        }	|                     |	¦  «         g }
| 	                    t          j        ¦  «        D ]Á}|j        d         }||
vr®| j                             |¦  «         |
                     |¦  «         t          j        t          |¦  «        |z   ¦  «        }t          j        d|d||z  ¬¦  «        }dd|› d�d	d
ddddddg
}t          j        |¦  «        }||_        |                     |¦  «         ŒÂ�ŒU||_        |S )aÃ  
        Takes in a score and returns a block that starts each part context and variant context
        with an identifier and {\stopStaff s1*n} (or s, whatever is needed for the duration)
        where n is the number of measures in the score.

        >>> import copy

        Set up score:

        >>> s = stream.Score()
        >>> p1,p2 = stream.Part(), stream.Part()
        >>> p1.insert(0, meter.TimeSignature('4/4'))
        >>> p2.insert(0, meter.TimeSignature('4/4'))
        >>> p1.append(variant.Variant(name='london'))
        >>> p2.append(variant.Variant(name='london'))
        >>> p1.append(variant.Variant(name='rome'))
        >>> p2.append(variant.Variant(name='rome'))
        >>> for i in range(4):
        ...    m = stream.Measure()
        ...    n = note.Note('D4', type='whole')
        ...    m.append(n)
        ...    p1.append(m)
        ...    p2.append(copy.deepcopy(m))
        >>> p1.id = 'pa'
        >>> p2.id = 'pb'
        >>> s.append(p1)
        >>> s.append(p2)

        Run method

        >>> lpc = lily.translate.LilypondConverter()
        >>> print(lpc.lyPartsAndOssiaInitFromScore(s))
        \new Staff  = pa { \stopStaff s1 s1 s1 s1 }
        \new Staff  = londonpa
                    \with {
                          \remove "Time_signature_engraver"
                          alignAboveContext = #"pa"
                          fontSize = #-3
                          \override StaffSymbol.staff-space = #(magstep -3)
                          \override StaffSymbol.thickness = #(magstep -3)
                          \override TupletBracket.bracket-visibility = ##f
                          \override TupletNumber.stencil = ##f
                          \override Clef.transparent = ##t
                          \override OctavateEight.transparent = ##t
                          \consists "Default_bar_line_engraver"
                        }
                 { \stopStaff s1 s1 s1 s1 }
        \new Staff  = romepa
                    \with {
                          \remove "Time_signature_engraver"
                          alignAboveContext = #"pa"
                          fontSize = #-3
                          \override StaffSymbol.staff-space = #(magstep -3)
                          \override StaffSymbol.thickness = #(magstep -3)
                          \override TupletBracket.bracket-visibility = ##f
                          \override TupletNumber.stencil = ##f
                          \override Clef.transparent = ##t
                          \override OctavateEight.transparent = ##t
                          \consists "Default_bar_line_engraver"
                        }
                 { \stopStaff s1 s1 s1 s1 }
        \new Staff  = pb { \stopStaff s1 s1 s1 s1 }
        \new Staff  = londonpb
                    \with {
                          \remove "Time_signature_engraver"
                          alignAboveContext = #"pb...
                          fontSize = #-3
                          \override StaffSymbol.staff-space = #(magstep -3)
                          \override StaffSymbol.thickness = #(magstep -3)
                          \override TupletBracket.bracket-visibility = ##f
                          \override TupletNumber.stencil = ##f
                          \override Clef.transparent = ##t
                          \override OctavateEight.transparent = ##t
                          \consists "Default_bar_line_engraver"
                        }
                 { \stopStaff s1 s1 s1 s1 }
        \new Staff  = romepb
                    \with {
                          \remove "Time_signature_engraver"
                          alignAboveContext = #"pb...
                          fontSize = #-3
                          \override StaffSymbol.staff-space = #(magstep -3)
                          \override StaffSymbol.thickness = #(magstep -3)
                          \override TupletBracket.bracket-visibility = ##f
                          \override TupletNumber.stencil = ##f
                          \override Clef.transparent = ##t
                          \override OctavateEight.transparent = ##t
                          \consists "Default_bar_line_engraver"
                        }
                 { \stopStaff s1 s1 s1 s1 }
        z{ \stopStaff %s}ÚnewÚStaff©ÚtypeÚ
optionalIdÚsimpleStringrá   r   z!\remove "Time_signature_engraver"zalignAboveContext = #"ú"zfontSize = #-3z1\override StaffSymbol.staff-space = #(magstep -3)z/\override StaffSymbol.thickness = #(magstep -3)z0\override TupletBracket.bracket-visibility = ##fz$\override TupletNumber.stencil = ##fz \override Clef.transparent = ##tz)\override OctavateEight.transparent = ##tz%\consists "Default_bar_line_engraver")rZ   ÚLyMusicListrÝ   r.   ÚidÚLyOptionalIdÚgetLySpacersFromStreamÚLyPrefixCompositeMusicr—   ÚgetElementsByClassr   r±   Úgroupsrb   ÚLyContextModificationÚoptionalContextModrÏ   )rj   rÛ   ÚlpMusicListÚ	musicListrò   ÚpÚ
partIdTextÚpartIdÚspacerDurationÚlpPrefixCompositeMusicPartÚvariantsAddedForPartÚvÚvariantNameÚ	variantIdÚlpPrefixCompositeMusicVariantÚcontextModListr  s                    r   ræ   z.LilypondConverter.lyPartsAndOssiaInitFromScore¥  sÐ  € õx ”oÑ'Ô'ˆàˆ	Ø%ˆà”ð %	Dñ %	DˆAÝ*¨1¬4Ñ0Ô0ˆJÝÔ% jÑ1Ô1ˆFØ!×8Ò8¸Ñ;Ô;ˆNÝ),Ô)CÈØOUØQXØJQÐTbÑJbð*dñ *dô *dÐ&ð ×ÒÐ7Ñ8Ô8Ð8à#%Ð Ø×)Ò)­'¬/Ñ:Ô:ð Dð D�Øœh qœk�ØÐ&:Ð:Ð:ØÔ&×-Ò-¨kÑ:Ô:Ð:Ø(×/Ò/°Ñ<Ô<Ð<Ý #Ô 0Õ1BÀ;Ñ1OÔ1OÐR\Ñ1\Ñ ]Ô ]�IÝ47Ô4NØ"Ø#,Ø%,Ø%¨Ñ6ð	5ñ 5ô 5Ð1ð 'KØ&MÀ
Ð&MÐ&MÐ&MØ&7Ø&ZØ&XØ&YØ&MØ&IØ&RØ&Nð
&(�Nõ *-Ô)BÀ>Ñ)RÔ)RÐ&ØGYÐ1ÔDØ×$Ò$Ð%BÑCÔCÐCøñ5Dð8  )ˆÔàÐr   c                ó^  — d}|D ]§}t          |t          j        ¦  «        sŒ|j        j        dk    rŒ.	 t          |                      |j        ¦  «        ¦  «        }|dz   |z   }Œ_# t          $ r< |j        j        D ],}t          |                      |¦  «        ¦  «        }|dz   |z   }Œ-Y Œ¤w xY w|S )a3  
        Creates a series of Spacer objects for the measures in a Stream Part.

        >>> m1 = stream.Measure(converter.parse('tinynotation: 3/4 a2.'))
        >>> m2 = stream.Measure(converter.parse('tinynotation: 3/4 b2.'))
        >>> m3 = stream.Measure(converter.parse('tinynotation: 4/4 a1'))
        >>> m4 = stream.Measure(converter.parse('tinynotation: 4/4 b1'))
        >>> m5 = stream.Measure(converter.parse('tinynotation: 4/4 c1'))
        >>> m6 = stream.Measure(converter.parse('tinynotation: 5/4 a4 b1'))
        >>> streamIn = stream.Stream([m1, m2, m3, m4, m5, m6])
        >>> lpc = lily.translate.LilypondConverter()
        >>> print(lpc.getLySpacersFromStream(streamIn))
        s2. s2. s1 s1 s1 s1 s4

        TODO: Low-priority: rare, but possible: tuplet time signatures (3/10), etc.
        r$   ç        r¤   )	Ú
isinstancer   r©   r
   ÚquarterLengthr'   Ú lyMultipliedDurationFromDurationÚ	ExceptionÚ
components)rj   ÚstreamInÚmeasuresOnlyr,   ÚelÚdurr-   s          r   rÿ   z(LilypondConverter.getLySpacersFromStream1  sä   € ð& ˆð ð 	<ð 	<ˆBÝ˜b¥&¤.Ñ1Ô1ð ØØŒ{Ô(¨CÒ/Ð/Øð<Ý˜$×?Ò?ÀÄÑLÔLÑMÔM�Ø+¨cÑ1°CÑ7��øåð <ð <ð <ØœÔ/ð <ð <�AÝ˜d×CÒCÀAÑFÔFÑGÔG�CØ#/°#Ñ#5¸Ñ#;�L�Lð<ð <ð<øøøð Ðs   ´/A$Á$AB*Â)B*c                óö  — g }t          j        ¦   «         }t          j        ¦   «         }t          j        ¦   «         }||_        ||_        |                      |¦  «         |€3|j        D ]*}|                     |  	                    |¦  «        ¦  «         Œ+nJ|                     |¦  «         |j        D ]-}|                     |  	                    |dd¬¦  «        ¦  «         Œ.|  
                    ¦   «          ||_        |S )aE	  
        More complex example showing how the score can be set up with ossia parts:

        >>> lpc = lily.translate.LilypondConverter()
        >>> #_DOCS_SHOW b = corpus.parse('bach/bwv66.6')
        >>> b = lily.translate._getCachedCorpusFile('bach/bwv66.6')  #_DOCS_HIDE
        >>> lpPartsAndOssiaInit = lpc.lyPartsAndOssiaInitFromScore(b)
        >>> lpGroupedMusicList = lpc.lyGroupedMusicListFromScoreWithParts(b,
        ...                scoreInit=lpPartsAndOssiaInit)
        >>> print(lpGroupedMusicList)
        <BLANKLINE>
         << \new Staff  = Soprano { \stopStaff s4 s1 s1 s1 s1 s1 s1 s1 s1 s2. }
           \new Staff  = Alto { \stopStaff s4 s1 s1 s1 s1 s1 s1 s1 s1 s2. }
           \new Staff  = Tenor { \stopStaff s4 s1 s1 s1 s1 s1 s1 s1 s1 s2. }
           \new Staff  = Bass { \stopStaff s4 s1 s1 s1 s1 s1 s1 s1 s1 s2. }
        <BLANKLINE>
          \context Staff  = Soprano \with {
              \autoBeamOff
          }
          { \startStaff \partial 32*8
                \clef "treble"
                \key fis \minor
                \time 4/4
                \set stemRightBeamCount = #1
                \once \override Stem.direction = #DOWN
                cis'' 8 [
                \set stemLeftBeamCount = #1
                \once \override Stem.direction = #DOWN
                b... 8 ]
                \bar "|"  %{ end measure 0 %}
                \once \override Stem.direction = #UP
                a' 4
                \once \override Stem.direction = #DOWN
                b... 4
                \once \override Stem.direction = #DOWN
                cis'' 4  \fermata
                \once \override Stem.direction = #DOWN
                e'' 4
                \bar "|"  %{ end measure 1 %}
                \once \override Stem.direction = #DOWN
                cis'' 4
                ...
        }
        <BLANKLINE>
        <BLANKLINE>
        \context Staff  = Alto \with  {
            \autoBeamOff
         }
         { \startStaff \partial 32*8
            \clef "treble"...
            \once \override Stem.direction = #UP
            e' 4
            \bar "|"  %{ end measure 0 %}
            \once \override Stem.direction = #UP
            fis' 4
            \once \override Stem.direction = #UP
            e' 4
        ...
        }
        <BLANKLINE>
        <BLANKLINE>
        >>
        <BLANKLINE>
        Nr^   Ú
startStaff)rø   ÚbeforeMatter)rZ   ÚLyGroupedMusicListÚLySimultaneousMusicrü   r  ÚsimultaneousMusicr˜   rÝ   r—   ré   rœ   rÏ   )rj   rÛ   rÞ   ÚcompositeMusicListrð   ÚlpSimultaneousMusicr  r  s           r   rç   z6LilypondConverter.lyGroupedMusicListFromScoreWithPartsa  s-  € ðF  Ðå Ô3Ñ5Ô5ÐÝ!Ô5Ñ7Ô7ÐÝ”oÑ'Ô'ˆØ(3ÐÔ%Ø/BÐÔ,à�Š˜Ñ$Ô$Ð$àÐØ”]ð Tð T�Ø"×)Ò)¨$×*OÒ*OÐPQÑ*RÔ*RÑSÔSÐSÐSðTð ×%Ò% iÑ0Ô0Ð0Ø”]ð Vð V�Ø"×)Ò)Ø×9Ò9¸!Ø?HØGSð :ñ Uô UñVô Vð Vð Vð
 	×ÒÑÔÐØ1ˆÔà!Ð!r   ÚalignBelowContextc                óŠ  — |                      d¬¦  «        }|€t          |j        ¦  «        }dt          j        ¦   «                              |¦  «        z   }g }t          |¦  «        D ]Æ}g }t          j        d||¬¦  «        }|                     |¦  «         d| _	        ||         D ],}	|  
                    |	¦  «        }
|                     |
¦  «         Œ-d| _	        t          j        |¦  «        }t          j        |¬¦  «        }t          j        |¬	¦  «        }|                     |¦  «         ŒÇt          j        |¬
¦  «        }|S )ad  
        returns a LyNewLyrics object

        This is a bit of a hack. This should be switched over to using a
        prefixed context thing with \new Lyric = "id" \with { } {}

        >>> s = converter.parse('tinyNotation: 4/4 c4_hel- d4_-lo r4 e4_world')
        >>> s.makeMeasures(inPlace=True)
        >>> s.id = 'helloWorld'

        >>> lpc = lily.translate.LilypondConverter()
        >>> lyNewLyrics = lpc.lyNewLyricsFromStream(s)
        >>> print(lyNewLyrics)
        \addlyrics { \set alignBelowContext = #"helloWorld"
           "hel" --
           "lo"__
           "world"
            }
        T)ÚskipTiesNú#Úset)ÚmodeÚvalue1Úvalue2F©r  ©ÚsequentialMusic)ÚgroupedMusicLists)Úlyricsr.   rý   rZ   ÚLyObjectrŒ   ÚsortedÚLyPropertyOperationr—   rh   ÚlyLyricElementFromM21Lyricrü   ÚLySequentialMusicr   ÚLyNewLyrics)rj   r  ÚstreamIdÚ	alignmentÚ
lyricsDictÚlpGroupedMusicListsÚlyricNumÚ	lyricListÚlpAlignmentPropertyr  ÚlpLyricElementÚlpLyricListÚlpSequentialMusicrð   ÚlpNewLyricss                  r   ÚlyNewLyricsFromStreamz'LilypondConverter.lyNewLyricsFromStream¾  s[  € ð( —_’_¨d�_Ñ3Ô3ˆ
àÐÝ(¨¬Ñ5Ô5ˆHà�œ™œ×3Ò3°HÑ=Ô=Ñ=ˆà ÐÝ˜zÑ*Ô*ð 	;ð 	;ˆHØˆIÝ"%Ô"9¸uØAJØAIð#Kñ #Kô #KÐð ×ÒÐ0Ñ1Ô1Ð1àˆDŒKØ  Ô*ð 1ð 1�Ø!%×!@Ò!@ÀÑ!DÔ!D�Ø× Ò  Ñ0Ô0Ð0Ð0àˆDŒKåœ/¨)Ñ4Ô4ˆKå #Ô 5ÀÐ LÑ LÔ LÐÝ!$Ô!7ÐHYÐ!ZÑ!ZÔ!ZÐØ×&Ò&Ð'9Ñ:Ô:Ð:Ð:å”oÐ8KÐLÑLÔLˆàÐr   c                ó$  — t          | d¦  «        r| j        }nd}|}|€|rd}nQ|€|du rd}nH|j        dk    rd}n:|j        €d}n0d|j        z   dz   }|j        dk    r|dz   }d}n|j        d	v r|d
z   }d}|| _        t	          j        |¦  «        }|S )aç  
        Returns a :class:`~music21.lily.lilyObjects.LyLyricElement` object
        from a :class:`~music21.note.Lyric` object.

        Uses self.inWord to keep track of whether we're in the middle of
        a word.

        >>> s = converter.parse('tinyNotation: 4/4 c4_hel- d4_-lo r2 e2 f2_world')
        >>> s.makeMeasures(inPlace=True)
        >>> lyrics = s.lyrics()[1]  # get first verse (yes, 1 = first, not 0!)

        >>> lpc = lily.translate.LilypondConverter()
        >>> lpc.lyLyricElementFromM21Lyric(lyrics[0])
        <music21.lily.lilyObjects.LyLyricElement "hel" -->
        >>> lpc.inWord
        True
        >>> lpc.lyLyricElementFromM21Lyric(lyrics[1])
        <music21.lily.lilyObjects.LyLyricElement "lo"__>
        >>> lpc.lyLyricElementFromM21Lyric(lyrics[2])
        <music21.lily.lilyObjects.LyLyricElement _>
        >>> lpc.lyLyricElementFromM21Lyric(lyrics[3])
        <music21.lily.lilyObjects.LyLyricElement "world">
        >>> lpc.inWord
        False
        rh   FNz _ r$   rû   ÚendÚ__)ÚbeginÚmiddlez --T)rä   rh   ÚtextÚsyllabicrZ   ÚLyLyricElement)rj   Úm21Lyricrh   r  rI  r?  s         r   r5  z,LilypondConverter.lyLyricElementFromM21Lyricò  sÕ   € õ6 �4˜Ñ"Ô"ð 	Ø”[ˆFˆFàˆFàˆØˆ:˜&ˆ:ØˆDˆDØˆZ˜F e˜O˜OØˆDˆDØŒW˜Š]ˆ]ØˆDˆDØŒWˆ_ØˆDˆDà˜œ‘= 3Ñ&ˆDàŒ{˜eÒ#Ð#Ø˜d‘{�Ø��Ø”Ð 3Ð3Ð3Ø˜e‘|�Ø�ð ˆŒÝÔ+¨DÑ1Ô1ˆØÐr   c                ó2  — g }t          j        |¬¦  «        }t          j        ||¬¦  «        }|                      |¦  «         |                      |¦  «         |                      ¦   «         }|�|                     |¦  «         |                      ¦   «          |S )aX  
        returns a LySequentialMusic object from a stream

        >>> c = converter.parse('tinynotation: 3/4 C4 D E F2.')
        >>> lpc = lily.translate.LilypondConverter()
        >>> lySequentialMusicOut = lpc.lySequentialMusicFromStream(c)
        >>> lySequentialMusicOut
        <music21.lily.lilyObjects.LySequentialMusic { \clef "b...>
        >>> print(lySequentialMusicOut)
        { \clef "bass"
         \time 3/4
         c 4
         d 4
         e 4
         \bar "|"  %{ end measure 1 %}
         f 2.
         \bar "|."  %{ end measure 2 %}
          }
        <BLANKLINE>
        ©rÏ   )r  r  )rZ   rü   r6  r˜   Ú appendObjectsToContextFromStreamÚcloseMeasurer—   rœ   )rj   r  r  r  r  rA  ÚlyObjects          r   ÚlySequentialMusicFromStreamz-LilypondConverter.lySequentialMusicFromStream*  s¤   € ð* ˆ	å”o¨yÐ9Ñ9Ô9ˆÝÔ1¸KØ?KðMñ Mô MÐà�Š˜Ñ$Ô$Ð$Ø×-Ò-¨hÑ7Ô7Ð7à×$Ò$Ñ&Ô&ˆØÐØ×Ò˜XÑ&Ô&Ð&à×ÒÑÔÐØ Ð r   c                ó"  — |}d}g }|j         }|€7d|v r)d}	t          j        t          |j        ¦  «        ¦  «        }n2d|v rd}	n+d}	n(|}	t          j        t          |j        ¦  «        ¦  «        }|j        j        du r|                     d¦  «         t          |d¦  «        r7|j	        dk    r,|                     d	|j	        › �¦  «         |j	        d
z  dk    r	 |  
                    |t          |j        ¦  «        ¬¦  «        }
|                      ||¬¦  «        }t          j        |¬¦  «        }t          j        ||
¬¦  «        }t          j        |¬¦  «        }|€d}|rt          j        |¦  «        }nd}t          j        |||	||¬¦  «        }|S )ac  
        returns an LyPrefixCompositeMusic object from
        a stream (generally a part, but who knows!)

        >>> c = converter.parse('tinynotation: 3/4 C4 D E F2.')
        >>> c.staffLines = 4

        >>> lpc = lily.translate.LilypondConverter()
        >>> lyPrefixCompositeMusicOut = lpc.lyPrefixCompositeMusicFromStream(c, contextType='Staff')
        >>> lyPrefixCompositeMusicOut
        <music21.lily.lilyObjects.LyPrefixCompositeMusic \new Staff...>
        >>> print(lyPrefixCompositeMusicOut)
        \new Staff = ... \with {
         \override StaffSymbol.line-count = #4
        }
        { \clef "bass"
             \time 3/4
             c 4
             d 4
             e 4
             \bar "|"  %{ end measure 1 %}
             f 2.
             \bar "|."  %{ end measure 2 %}
              }
        <BLANKLINE>
        <BLANKLINE>
        Nr­   rö   rª   Tz\autoBeamOff Ú
staffLinesé   z$\override StaffSymbol.line-count = #r   r   )r8  )r  r.  )rè   Ú	newLyricsrß   rõ   )rø   rù   rú   r  rá   )r°   rZ   rþ   r.   rý   ÚstreamStatusÚbeamsr—   rä   rT  rC  rR  r   rã   rë   r  r   )rj   r  ÚcontextTyperø   r  ÚcompositeMusicTyperù   r  r-   r˜   rB  rA  rð   rî   rò   Ú
contextModrñ   s                    r   ré   z2LilypondConverter.lyPrefixCompositeMusicFromStreamO  så  € ðF "Ðàˆ
ØˆàÔˆØÐØ˜ˆ{ˆ{Ø$�
Ý Ô-Õ.?ÀÄÑ.LÔ.LÑMÔM�
�
Ø˜A��Ø$�
�
à$�
�
à$ˆJÝÔ)Õ*;¸H¼KÑ*HÔ*HÑIÔIˆJàÔ Ô&¨$Ð.Ð.Ø×!Ò!Ð"2Ñ3Ô3Ð3å�8˜\Ñ*Ô*ð 	¨xÔ/BÀaÒ/GÐ/GØ×!Ò!Ð"_È(ÔJ]Ð"_Ð"_Ñ`Ô`Ð`ØÔ" QÑ&¨!Ò+Ð+Øà×0Ò0°ÕDUÐV^ÔVaÑDbÔDbÐ0ÑcÔcˆà ×<Ò<¸XÐT`Ð<ÑaÔaÐÝ Ô3ÐDUÐVÑVÔVÐÝÔ/ÐASØ:EðGñ Gô GÐå”+Ð-=Ð>Ñ>Ô>ˆàÐ%Ø!&Ðàð 	ÝÔ2°>ÑBÔBˆJˆJàˆJå!$Ô!;ÐASØGQØISØOYØBIð	"Kñ "Kô "KÐð
 &Ð%r   c                óÌ  — ddl m}  ||¦  «        D �]Ð}t          |¦  «        dk    r%|d         }||_        |                      |¦  «         Œ;g }g }g }|D ]~}t          |t          j        ¦  «        r|                     |¦  «         Œ2t          |t          j
        ¦  «        r|                     |¦  «         Œb||_        |                     |¦  «         Œ|r)|D ]	}||_        Œ
|                      ||| j        ¬¦  «         |rÅg }	t          j        ¦   «         }
t          j        ¦   «         }t          j        ¦   «         }||_        ||
_        |D ]5}|| j        vr*|                      |¦  «        }|	                     |¦  «         Œ6|	|_        | j        }|j        }|                     |
¦  «         |
                     | j        ¦  «         |r|D ]}|                      |¦  «         Œ�ŒÒdS )aP  
        takes a Stream and appends all the elements in it to the current
        context's .contents list, and deals with creating Voices in it. It also deals with
        variants in it.

        (should eventually replace the main Score parts finding tools)

        >>> lpc = lily.translate.LilypondConverter()
        >>> lpMusicList = lily.lilyObjects.LyMusicList()
        >>> lpc.context = lpMusicList
        >>> lpc.context.contents
        []
        >>> c = converter.parse('tinynotation: 3/4 b4 d- e#')
        >>> lpc.appendObjectsToContextFromStream(c)
        >>> print(lpc.context.contents)
        [<music21.lily.lilyObjects.LyEmbeddedScm...>,
         <music21.lily.lilyObjects.LySimpleMusic...>,
         <music21.lily.lilyObjects.LySimpleMusic...>,
         <music21.lily.lilyObjects.LySimpleMusic...]
        >>> print(lpc.context)
        \clef "treble"
        \time 3/4
        b' 4
        des' 4
        eis' 4
        <BLANKLINE>

        >>> v1 = stream.Voice()
        >>> v1.append(note.Note('C5', quarterLength = 4.0))
        >>> v2 = stream.Voice()
        >>> v2.append(note.Note('C#5', quarterLength = 4.0))
        >>> m = stream.Measure()
        >>> m.insert(0, v1)
        >>> m.insert(0, v2)
        >>> lpMusicList = lily.lilyObjects.LyMusicList()
        >>> lpc.context = lpMusicList
        >>> lpc.appendObjectsToContextFromStream(m)
        >>> print(lpc.context)  # internal spaces removed
          << \new Voice { c'' 1
                    \bar "|."  %{ end measure 1 %}
                  }
           \new Voice { cis'' 1
                  }
            >>
        r   )ÚOffsetIteratorr€   ©Ú
activeSiterd   N)Úmusic21.stream.iteratorr]  Úlenr_  ÚappendM21ObjectToContextr  r   rª   r—   r   r±   ÚappendContextFromVariantrd   rZ   r   r!  rü   r  r"  r`   ré   rÏ   r^   Ú	setParent)rj   ÚstreamObjectr]  ÚgroupedElementsr  Ú	voiceListÚvariantListÚ	otherListr  Ú
musicList2Úlp2GroupedMusicListÚlp2SimultaneousMusicÚlp2MusicListÚvoicerñ   ÚcontextObjectÚcurrentMusicLists                    r   rO  z2LilypondConverter.appendObjectsToContextFromStream£  sa  € ð\ 	;Ð:Ð:Ð:Ð:Ð:Ø-˜~¨lÑ;Ô;ð 2	:ñ 2	:ˆOõ �?Ñ#Ô# qÒ(Ð(Ø$ QÔ'�Ø ,�”Ø×-Ò-¨bÑ1Ô1Ð1Ð1ð �	Ø �Ø�	Ø)ð -ð -�BÝ! "¥f¤lÑ3Ô3ð -Ø!×(Ò(¨Ñ,Ô,Ð,Ð,Ý# B­¬Ñ8Ô8ð -Ø#×*Ò*¨2Ñ.Ô.Ð.Ð.à(4˜œØ!×(Ò(¨Ñ,Ô,Ð,Ð,àð XØ(ð 4ð 4˜Ø'3˜œ˜Ø×1Ò1°+Ø=IØBFÔBVð 2ñ Xô Xð Xð ð @Ø!#�JÝ*-Ô*@Ñ*BÔ*BÐ'Ý+.Ô+BÑ+DÔ+DÐ(Ý#&¤?Ñ#4Ô#4�LØ5AÐ(Ô2Ø<PÐ'Ô9à!*ð Fð F˜Ø ¨Ô(8Ð8Ð8Ø59×5ZÒ5ZÐ[`Ñ5aÔ5aÐ2Ø&×-Ò-Ð.DÑEÔEÐEøà,6�LÔ)à$(¤L�MØ'4Ô'=Ð$Ø$×+Ò+Ð,?Ñ@Ô@Ð@Ø'×1Ò1°$´,Ñ?Ô?Ð?àð :Ø'ð :ð :˜Ø×5Ò5°bÑ9Ô9Ð9Ð9ùðe2	:ð 2	:r   c                ó~  — || j         v rdS |j        }d|vr@|j        j        dk    r0|                     ¦   «         }|D ]}|                      |¦  «         ŒdS | j        }t          |d¦  «        r|j        }nt          d|›�¦  «        ‚t          |d¦  «        r7|j
        du r.t          j        | j        ¦  «        }|                     |¦  «         d}d|v rŸ|                      ¦   «         }	|	�*|                     |	¦  «         |	                     |¦  «         |                      |¦  «        }
|
�*|                     |
¦  «         |
                     |¦  «         |                      |¦  «         || _        �nþd|v rA|                      |¦  «        }|                     |¦  «         |                     |¦  «         �n¹d	|v sd
|v r|                      |¦  «         �nšd|v r|                      |¦  «         �nd|v rA|                      |¦  «        }|                     |¦  «         |                     |¦  «         �n:d|v r@|                      |¦  «        }|                     |¦  «         |                     |¦  «         nöd|v rI| j        du r@|                      |¦  «        }|                     |¦  «         |                     |¦  «         n©d|v r|                      || j        ¬¦  «         nˆd|v r?t          j        d¦  «        }|                     |¦  «         |                     |¦  «         nEd|v r?t          j        d¦  «        }|                     |¦  «         |                     |¦  «         nd}t          |d¦  «        r9|j        du r2t          j        | j        ¦  «        }|                     |¦  «         dS dS dS )z|
        converts any type of object into a lilyObject of LyMusic (
        LySimpleMusic, LyEmbeddedScm etc.) type
        Nr§   ÚcomplexrÏ   z1Cannot get a currentMusicList from contextObject ÚstartTransparencyTr©   ÚNoteÚRestÚChordÚClefÚKeySignatureÚTimeSignatureFr±   ©rd   ÚSystemLayoutz\breakÚ
PageLayoutz
\pageBreakÚstopTransparency)r`   r°   r
   rø   ÚsplitAtDurationsrb  r^   rä   rÏ   rŠ   rs  rZ   r�   ÚtransparencyStartSchemer—   rP  rd  ÚgetSchemeForPaddingrO  ra   ré   ÚappendContextFromNoteOrRestÚappendContextFromChordÚlyEmbeddedScmFromClefÚlyEmbeddedScmFromKeySignaturere   ÚlyEmbeddedScmFromTimeSignaturerc  rd   r}  ÚtransparencyStopScheme)rj   Ú
thisObjectr-   ÚthisObjectSplitÚsubComponentro  rp  ÚlySchemerQ  ÚcloseMeasureObjÚpadObjs              r   rb  z*LilypondConverter.appendM21ObjectToContext  sE  € ð
 ˜Ô)Ð)Ð)ØˆFð Ôˆà˜1ÐÐ Ô!4Ô!9¸YÒ!FÐ!FØ(×9Ò9Ñ;Ô;ˆOØ /ð <ð <�Ø×-Ò-¨lÑ;Ô;Ð;Ð;ØˆFàœˆÝ�= *Ñ-Ô-ð 	WØ,Ô5ÐÐå(ØUÀMÐUÐUñWô Wð Wõ �:Ð2Ñ3Ô3ð 	.¸
Ô8TÐX\Ð8\Ð8\åÔ(¨Ô)EÑFÔFˆHØ×#Ò# HÑ-Ô-Ð-àˆØ˜ˆ>ˆ>ð #×/Ò/Ñ1Ô1ˆOØÐ*Ø ×'Ò'¨Ñ8Ô8Ð8Ø×)Ò)¨-Ñ8Ô8Ð8à×-Ò-¨jÑ9Ô9ˆFØÐ!Ø ×'Ò'¨Ñ/Ô/Ð/Ø× Ò  Ñ/Ô/Ð/ð ×1Ò1°*Ñ=Ô=Ð=Ø",ˆDÔÑà˜ˆ]ˆ]à×<Ò<¸ZÑHÔHˆHØ×#Ò# HÑ-Ô-Ð-Ø×Ò˜}Ñ-Ô-Ð-Ñ-Ø�qˆ[ˆ[˜F a˜K˜KØ×,Ò,¨ZÑ8Ô8Ð8Ñ8Ø˜ˆ\ˆ\Ø×'Ò'¨
Ñ3Ô3Ð3Ñ3Ø�qˆ[ˆ[Ø×1Ò1°*Ñ=Ô=ˆHØ×#Ò# HÑ-Ô-Ð-Ø×Ò˜}Ñ-Ô-Ð-Ñ-Ø˜qÐ Ð Ø×9Ò9¸*ÑEÔEˆHØ×#Ò# HÑ-Ô-Ð-Ø×Ò˜}Ñ-Ô-Ð-Ð-Ø Ð!Ð! dÔ&6¸%Ð&?Ð&?Ø×:Ò:¸:ÑFÔFˆHØ×#Ò# HÑ-Ô-Ð-Ø×Ò˜}Ñ-Ô-Ð-Ð-Ø˜!ˆ^ˆ^Ø×)Ò)¨*ÀdÔFZÐ)Ñ[Ô[Ð[Ð[Ø˜qÐ Ð ÝÔ(¨Ñ3Ô3ˆHØ×#Ò# HÑ-Ô-Ð-Ø×Ò˜}Ñ-Ô-Ð-Ð-Ø˜QÐÐÝÔ(¨Ñ7Ô7ˆHØ×#Ò# HÑ-Ô-Ð-Ø×Ò˜}Ñ-Ô-Ð-Ð-àˆHå�:Ð1Ñ2Ô2ð 	.°zÔ7RÐVZÐ7ZÐ7ZåÔ(¨Ô)DÑEÔEˆHØ×#Ò# HÑ-Ô-Ð-Ð-Ð-ð	.ð 	.Ð7ZÐ7Zr   c                óf  — |j         j        rdS |                      |¦  «         |                      |¦  «         |                      |¦  «         |                      |¦  «        }| j        j                             |¦  «         | 	                    | j        ¦  «         |  
                    |¦  «         dS )a]  
        appends lySimpleMusicFromNoteOrRest to the
        current context.

        >>> n = note.Note('C#4')
        >>> lpc = lily.translate.LilypondConverter()
        >>> lpMusicList = lily.lilyObjects.LyMusicList()
        >>> lpc.context = lpMusicList
        >>> lpc.appendContextFromNoteOrRest(n)
        >>> print(lpMusicList)
        cis' 4
        <BLANKLINE>

        >>> n2 = note.Note('D#4')
        >>> n2.duration.quarterLength = 1/3
        >>> n2.duration.tuplets[0].type = 'start'
        >>> n3 = note.Note('E4')
        >>> n3.duration.quarterLength = 1/3
        >>> n4 = note.Note('F4')
        >>> n4.duration.quarterLength = 1/3
        >>> n4.duration.tuplets[0].type = 'stop'

        >>> n5 = note.Note('F#4')

        >>> lpc.appendContextFromNoteOrRest(n2)
        >>> lpc.appendContextFromNoteOrRest(n3)
        >>> lpc.appendContextFromNoteOrRest(n4)
        >>> lpc.appendContextFromNoteOrRest(n5)

        >>> print(lpc.context)
        cis' 4
        \times 2/3 { dis' 8
           e' 8
           f' 8
            }
        <BLANKLINE>
        fis' 4
        <BLANKLINE>

        N)r
   ÚisGraceÚsetContextForTupletStartÚappendBeamCodeÚappendStemCodeÚlySimpleMusicFromNoteOrRestr^   rÏ   r—   rd  ÚsetContextForTupletStop)rj   Ú
noteOrRestÚlpSimpleMusics      r   r�  z-LilypondConverter.appendContextFromNoteOrRest]  s²   € ðT ÔÔ&ð 	ØˆFð 	×%Ò% jÑ1Ô1Ð1Ø×Ò˜JÑ'Ô'Ð'Ø×Ò˜JÑ'Ô'Ð'à×8Ò8¸ÑDÔDˆØŒÔ×$Ò$ ]Ñ3Ô3Ð3Ø×Ò ¤Ñ-Ô-Ð-Ø×$Ò$ ZÑ0Ô0Ð0Ð0Ð0r   c                óJ  — |                       |¦  «         |                      |¦  «         |                      |¦  «         |                      |¦  «        }| j        j                             |¦  «         |                     | j        ¦  «         |                      |¦  «         dS )aá  
        appends lySimpleMusicFromChord to the
        current context.

        >>> c = chord.Chord(['C4', 'E4', 'G4'])
        >>> lpc = lily.translate.LilypondConverter()
        >>> lpMusicList = lily.lilyObjects.LyMusicList()
        >>> lpc.context = lpMusicList
        >>> lpc.appendContextFromChord(c)
        >>> print(lpMusicList)
        < c' e' g'  > 4
        <BLANKLINE>

        >>> c2 = chord.Chord(['D4', 'F#4', 'A4'])
        >>> c2.duration.quarterLength = 1/3
        >>> c2.duration.tuplets[0].type = 'start'
        >>> c3 = chord.Chord(['D4', 'F4', 'G4'])
        >>> c3.duration.quarterLength = 1/3
        >>> c4 = chord.Chord(['C4', 'E4', 'G4', 'C5'])
        >>> c4.duration.quarterLength = 1/3
        >>> c4.duration.tuplets[0].type = 'stop'

        >>> c5 = chord.Chord(['C4', 'F4', 'A-4'])

        >>> lpc.appendContextFromChord(c2)
        >>> lpc.appendContextFromChord(c3)
        >>> lpc.appendContextFromChord(c4)
        >>> lpc.appendContextFromChord(c5)

        >>> print(lpc.context)
        < c'  e'  g'  > 4
        \times 2/3 { < d'  fis'  a'  > 8
           < d'  f'  g'  > 8
           < c'  e'  g'  c''  > 8
            }
        <BLANKLINE>
        < c'  f'  aes'  > 4
        <BLANKLINE>

        N)	r�  r�  r‘  ÚlySimpleMusicFromChordr^   rÏ   r—   rd  r“  )rj   Úchordr•  s      r   r‚  z(LilypondConverter.appendContextFromChordž  s�   € ðR 	×%Ò% eÑ,Ô,Ð,Ø×Ò˜EÑ"Ô"Ð"Ø×Ò˜EÑ"Ô"Ð"à×3Ò3°EÑ:Ô:ˆØŒÔ×$Ò$ ]Ñ3Ô3Ð3Ø×Ò ¤Ñ-Ô-Ð-Ø×$Ò$ UÑ+Ô+Ð+Ð+Ð+r   c                óô  — |j         }g }|j        rj|j        j        r^|j        j        du rPd|j        j        › d�dz   }d|j        j        › d�dz   }|                     |¦  «         |                     |¦  «         d|v r»|j        r|j        j        du r�|                      |j        ¦  «        }|                     |¦  «         |j        j        �T|j        j        j	        dk    r|                     d	¦  «         |j        j        j
        d
k    r|                     d¦  «         nX|                     d¦  «         nBd|v r>|j        r"|j        j        r|                     d¦  «         n|                     d¦  «         |                      |j        ¦  «        }|                     |¦  «         t          |d¦  «        rh|j        ra|j        j        d         j        dk    r|                     d¦  «         n0|j        j        d         j        dk    r|                     d¦  «         t#          j        |¬¦  «        }|                      |¦  «        }	t#          j        ||	¬¦  «        }
t#          j        |
¬¦  «        }|S )a¨  
        returns a lilyObjects.LySimpleMusic object for the generalNote containing this hierarchy::

            LyEventChord   containing
            LySimpleChordElements containing
            LySimpleElement containing
            LyPitch  AND
            LyMultipliedDuration containing:

                LyMultipliedDuration containing
                LyStenoDuration

        does not check for tuplets.  That's in
        appendContextFromNoteOrRest

        read-only property that returns a string of the lilypond representation of
        a note (or via subclassing, rest or chord)

        >>> conv = lily.translate.LilypondConverter()

        >>> n0 = note.Note('D#5')
        >>> n0.pitch.accidental.displayType = 'always'
        >>> n0.pitch.accidental.displayStyle = 'parentheses'
        >>> n0.style.color = 'blue'
        >>> sm = conv.lySimpleMusicFromNoteOrRest(n0)
        >>> print(sm)
        \override NoteHead.color = "blue"
        \override Stem.color = "blue"
        dis'' ! ? 4

        Now make the note disappear:

        >>> n0.style.hideObjectOnPrint = True
        >>> sm = conv.lySimpleMusicFromNoteOrRest(n0)
        >>> print(sm)
        s 4
        Fz\override NoteHead.color = "rû   rž   z\override Stem.color = "rt  NÚalwaysú! Úparenthesesú? ús ru  zr rX  r   Ústartz[ Ústopz] ©rÝ   )Ú
postEvents©Ú
eventChord)r°   ÚhasStyleInformationÚstyleÚcolorÚhideObjectOnPrintr—   ÚlyPitchFromPitchÚpitchÚ
accidentalÚdisplayTypeÚdisplayStyler  r
   rä   rX  Ú	beamsListrø   rZ   ÚLySimpleElementÚpostEventsFromObjectÚLyEventChordÚLySimpleMusic)rj   r”  r-   ÚsimpleElementPartsÚnoteheadColorÚ	stemColorÚlpPitchÚlpMultipliedDurationÚsimpleElementr¢  ÚevcÚmlSMs               r   r’  z-LilypondConverter.lySimpleMusicFromNoteOrRestÐ  s§  € ðL ÔˆàÐð Ô)ð 	5ØÔÔ%ð 5¨*Ô*:Ô*LÐPUÐ*UÐ*Uà YÀ
Ô@PÔ@VÐ YÐ YÐ YÐ\`Ñ `�ØQ¸
Ô8HÔ8NÐQÐQÐQÐTXÑX�	Ø"×)Ò)¨-Ñ8Ô8Ð8Ø"×)Ò)¨)Ñ4Ô4Ð4à�Qˆ;ˆ;ØÔ1ð 	0°ZÔ5EÔ5WÐ[`Ð5`Ð5`Ø×/Ò/°
Ô0@ÑAÔA�Ø"×)Ò)¨'Ñ2Ô2Ð2ØÔ#Ô.Ð:Ø!Ô'Ô2Ô>À(ÒJÐJØ*×1Ò1°$Ñ7Ô7Ð7Ø!Ô'Ô2Ô?À=ÒPÐPØ*×1Ò1°$Ñ7Ô7Ð7øà"×)Ò)¨$Ñ/Ô/Ð/Ð/Ø�qˆ[ˆ[ØÔ-ð 0°*Ô2BÔ2Tð 0Ø"×)Ò)¨$Ñ/Ô/Ð/Ð/à"×)Ò)¨$Ñ/Ô/Ð/à#×DÒDÀZÔEXÑYÔYÐØ×!Ò!Ð"6Ñ7Ô7Ð7å�:˜wÑ'Ô'ð 	0¨JÔ,<ð 	0ØÔÔ)¨!Ô,Ô1°WÒ<Ð<Ø"×)Ò)¨$Ñ/Ô/Ð/Ð/ØÔ!Ô+¨AÔ.Ô3°vÒ=Ð=Ø"×)Ò)¨$Ñ/Ô/Ð/åÔ+Ð2DÐEÑEÔEˆà×.Ò.¨zÑ:Ô:ˆ
åÔ˜}¸ÐDÑDÔDˆÝÔ ¨CÐ0Ñ0Ô0ˆàˆr   c                ór  — d}d}t          |d¦  «        �r|j        ��|j        D ][}|j        dk    r|dz  }Œ|j        dk    r|dz  }|dz  }Œ)|j        dk    r|dz  }Œ:|j        dk    r|j        d	k    r|dz  }ŒV|dz  }Œ\|dk    rRd
|› �}t	          j        |¦  «        }| j        j                             |¦  «         | 	                    | j        ¦  «         |dk    rXd|› �}t	          j        |¦  «        }| j        j                             |¦  «         | 	                    | j        ¦  «         dS dS dS dS )aD  
        Adds an LyEmbeddedScm object to the context's contents if the object's has a .beams
        attribute.

        >>> lpc = lily.translate.LilypondConverter()
        >>> lpMusicList = lily.lilyObjects.LyMusicList()
        >>> lpc.context = lpMusicList
        >>> lpc.context.contents
        []
        >>> n1 = note.Note(quarterLength=0.25)
        >>> n2 = note.Note(quarterLength=0.25)
        >>> n1.beams.fill(2, 'start')
        >>> n2.beams.fill(2, 'stop')

        >>> lpc.appendBeamCode(n1)
        >>> print(lpc.context.contents)
        [<music21.lily.lilyObjects.LyEmbeddedScm \set stemR...>]
        >>> print(lpc.context)
        \set stemRightBeamCount = #2

        >>> lpc = lily.translate.LilypondConverter()
        >>> lpMusicList = lily.lilyObjects.LyMusicList()
        >>> lpc.context = lpMusicList
        >>> lpc.context.contents
        []
        >>> lpc.appendBeamCode(n2)
        >>> print(lpc.context.contents)
        [<music21.lily.lilyObjects.LyEmbeddedScm \set stemL...>]
        >>> print(lpc.context)
        \set stemLeftBeamCount = #2

        r   rX  NrŸ  r€   Úcontinuer   ÚpartialÚleftz\set stemLeftBeamCount = #z\set stemRightBeamCount = #)
rä   rX  rø   Ú	directionrZ   r�   r^   rÏ   r—   rd  )rj   ÚnoteOrChordÚ	leftBeamsÚ
rightBeamsÚbÚbeamTextÚlpBeamSchemes          r   r�  z LilypondConverter.appendBeamCode&  sƒ  € ðB ˆ	Øˆ
Ý�; Ñ(Ô(ñ 	9ØÔ Ñ,Ø$Ô*ð ,ð ,�AØ”v Ò(Ð(Ø" a™˜
˜
Øœ :Ò-Ð-Ø" a™˜
Ø! Q™˜	˜	Øœ 6Ò)Ð)Ø! Q™˜	˜	Øœ 9Ò,Ð,Øœ;¨&Ò0Ð0Ø%¨™N˜I˜Ià&¨!™O˜JøØ˜q’=�=ØL¸yÐLÐL�HÝ#&Ô#4°XÑ#>Ô#>�LØ”LÔ)×0Ò0°Ñ>Ô>Ð>Ø ×*Ò*¨4¬<Ñ8Ô8Ð8à ’>�>ØNÀ
ÐNÐN�HÝ#&Ô#4°XÑ#>Ô#>�LØ”LÔ)×0Ò0°Ñ>Ô>Ð>Ø ×*Ò*¨4¬<Ñ8Ô8Ð8Ð8Ð8ð3	9ð 	9Ø,Ð,ð( "�>r   c                ó   — t          |d¦  «        ry|j        �t|j                             ¦   «         }|dv rYd|› d�}t          j        |¦  «        }| j        j                             |¦  «         |                     | j        ¦  «         dS dS dS dS )aŠ  
        Adds an LyEmbeddedScm object to the context's contents if the object's stem direction
        is set (currently, only "up" and "down" are supported).

        >>> lpc = lily.translate.LilypondConverter()
        >>> lpMusicList = lily.lilyObjects.LyMusicList()
        >>> lpc.context = lpMusicList
        >>> lpc.context.contents
        []
        >>> n = note.Note()
        >>> n.stemDirection = 'up'
        >>> lpc.appendStemCode(n)
        >>> print(lpc.context.contents)
        [<music21.lily.lilyObjects.LyEmbeddedScm \once \ove...>]
        >>> print(lpc.context.contents[0])
        \once \override Stem.direction = #UP
        ÚstemDirectionN)ÚUPÚDOWNz"\once \override Stem.direction = #ú )	rä   rÇ  ÚupperrZ   r�   r^   rÏ   r—   rd  )rj   rÀ  rÇ  ÚstemFileÚlpStemSchemes        r   r‘  z LilypondConverter.appendStemCoded  s¨   € õ$ �; Ñ0Ô0ð 	5°[Ô5NÐ5ZØ'Ô5×;Ò;Ñ=Ô=ˆMØ Ð.Ð.ØUÀ=ÐUÐUÐU�Ý"Ô0°Ñ:Ô:�Ø”Ô%×,Ò,¨\Ñ:Ô:Ð:Ø×&Ò& t¤|Ñ4Ô4Ð4Ð4Ð4ð	5ð 	5Ð5ZÐ5Zà.Ð.r   c                ó   — |                       |¦  «         |j        r|j        j        durÞ|                      |¦  «         g }|j        D ]©}g }|                      |¦  «        }|                     |¦  «         |j        �J|j        j	        dk    r|                     d¦  «         |j        j
        dk    r|                     d¦  «         t          j        |¬¦  «        }|                     |¦  «         Œªt          j        |¬¦  «        }nt          j        d	d
¦  «        }|                      |j        ¦  «        }|                      |¦  «        }	t          j        |||	¬¦  «        }
t          j        |
¬¦  «        }t          j        |¬¦  «        }|S )a´  

        >>> conv = lily.translate.LilypondConverter()
        >>> c1 = chord.Chord(['C#2', 'E4', 'D#5'])
        >>> c1.quarterLength = 3.5
        >>> c1.pitches[2].accidental.displayType = 'always'
        >>> print(conv.lySimpleMusicFromChord(c1))
         < cis, e' dis''  !  > 2..

        test hidden chord:

        >>> c1.style.hideObjectOnPrint = True
        >>> print(conv.lySimpleMusicFromChord(c1))
        s 2..
        TNrš  r›  rœ  r�  r¡  )ÚchordBodyElementsrž  r$   )Ú	chordBodyÚoptionalNoteModeDurationr¢  )ÚnoteChordElementr£  )r�  r¥  r¦  r¨  r‘  Úpitchesr©  r—   r«  r¬  r­  rZ   ÚLyChordBodyElementÚLyChordBodyÚLyPitchr  r
   r°  ÚLyNoteChordElementr±  r²  )rj   ÚchordObjrÏ  r  ÚchordBodyElementPartsr¶  ÚlpChordElementÚlpChordBodyr·  r¢  ÚlpNoteChordElementr¹  rº  s                r   r—  z(LilypondConverter.lySimpleMusicFromChord~  s¨  € ð  	×Ò˜HÑ%Ô%Ð%ØÔ+ð 	0¨x¬~Ô/OÐW[Ð/[Ð/[à×Ò Ñ)Ô)Ð)à "ÐØÔ%ð 
9ð 
9�Ø(*Ð%Ø×/Ò/°Ñ2Ô2�Ø%×,Ò,¨WÑ5Ô5Ð5Ø”<Ð+Ø”|Ô/°8Ò;Ð;Ø-×4Ò4°TÑ:Ô:Ð:Ø”|Ô0°MÒAÐAØ-×4Ò4°TÑ:Ô:Ð:Ý!$Ô!7Ð>SÐ!TÑ!TÔ!T�Ø!×(Ò(¨Ñ8Ô8Ð8Ð8Ýœ/Ð<MÐNÑNÔNˆKˆKåœ+ d¨BÑ/Ô/ˆKà#×DÒDÀXÔEVÑWÔWÐà×.Ò.¨xÑ8Ô8ˆ
å Ô3¸kØMaØ?IðKñ Kô KÐõ ÔÐ0BÐCÑCÔCˆÝÔ ¨CÐ0Ñ0Ô0ˆØˆr   c                ó   — g }t          |d¦  «        r,|j        �%|j        j        dk    r|                     d¦  «         t          |d¦  «        r/|j        r(|j        D ] }d|j        v r|                     d¦  «         Œ!|S )z`
        attaches events that apply to notes and chords (and some other things) equally
        ÚtieNr   z~ ÚexpressionsÚFermataz	\fermata )rä   rÞ  rø   r—   rß  r°   )rj   ÚgeneralNoter¢  ÚthisExpressions       r   r°  z&LilypondConverter.postEventsFromObject¯  sŸ   € ð
 ˆ
õ �; Ñ&Ô&ð 	(¨;¬?Ð+FØŒÔ# vÒ-Ð-Ø×!Ò! $Ñ'Ô'Ð'å�; Ñ.Ô.ð 	4°;Ô3Jð 	4Ø"-Ô"9ð 4ð 4�Ø Ô 6Ð6Ð6Ø×%Ò% lÑ3Ô3Ð3øØÐr   c                ó„   — |                       |¦  «        }|                      |¦  «        }t          j        ||¦  «        }|S )ze
        converts a music21.pitch.Pitch object to a lily.lilyObjects.LyPitch
        object.
        )ÚbaseNameFromPitchÚoctaveCharactersFromPitchrZ   rÖ  )rj   rª  ÚbaseNameÚoctaveModCharsÚlyPitchs        r   r©  z"LilypondConverter.lyPitchFromPitchÅ  s@   € ð ×)Ò)¨%Ñ0Ô0ˆØ×7Ò7¸Ñ>Ô>ˆÝ”+˜h¨Ñ7Ô7ˆØˆr   c                ó    — |j                              ¦   «         }|j        �-|j        j        | j        v r|| j        |j        j                 z  }|S )zf
        returns a string of the base name (including accidental)
        for a music21 pitch
        )ÚstepÚlowerr«  ÚnameÚaccidentalConvert)rj   rª  ræ  s      r   rä  z#LilypondConverter.baseNameFromPitchÐ  sQ   € ð ”:×#Ò#Ñ%Ô%ˆØÔÐ'ØÔÔ$¨Ô(>Ð>Ð>Ø˜DÔ2°5Ô3CÔ3HÔIÑI�Øˆr   c                óJ   — |j         }|dk     rd|z
  }d|z  }n
|dz
  }d|z  }|S )z�
        returns a string of single-quotes or commas or '' representing
        the octave of a :class:`~music21.pitch.Pitch` object
        é   ú,r?   )ÚimplicitOctave)rj   rª  rñ  ÚcorrectedOctaverç  s        r   rå  z+LilypondConverter.octaveCharactersFromPitchÜ  sG   € ð
 Ô-ˆØ˜AÒÐØ .Ñ0ˆOØ  ?Ñ2ˆNˆNà,¨qÑ0ˆOØ  ?Ñ2ˆNØÐr   ÚdurationObjú*duration.Duration | duration.DurationTuplec                ó  — 	 t          j        |j        ¦  «        }n,# t           j        $ r}t	          d|› d|› �¦  «        ‚d}~ww xY w|dk    rt	          d|› �¦  «        ‚|dk     r!|dk    rd}n'|d	k    rd
}nt	          d¦  «        ‚t          |¦  «        }	 t          j        |t          |j        ¦  «        ¦  «        }t          j	        |¦  «        }n,# t           j        $ r}t	          d|› d|› �¦  «        ‚d}~ww xY w|S )a—  
        take a simple Duration (that is, one with one DurationTuple)
        object and return a LyMultipliedDuration object:

        >>> d = duration.Duration(3)
        >>> lpc = lily.translate.LilypondConverter()
        >>> lyMultipliedDuration = lpc.lyMultipliedDurationFromDuration(d)
        >>> str(lyMultipliedDuration)
        '2. '

        >>> str(lpc.lyMultipliedDurationFromDuration(duration.Duration(8.0)))
        '\\breve '
        >>> str(lpc.lyMultipliedDurationFromDuration(duration.Duration(16.0)))
        '\\longa '

        Does not work with zero duration notes:

        >>> d = duration.Duration(0.0)
        >>> str(lpc.lyMultipliedDurationFromDuration(d))
        Traceback (most recent call last):
        music21.lily.translate.LilyTranslateException: Cannot translate an object of
            zero duration <music21.duration.Duration 0.0>

        Does not work with complex durations:

        >>> d = duration.Duration(5.0)
        >>> str(lpc.lyMultipliedDurationFromDuration(d))
        Traceback (most recent call last):
        music21.lily.translate.LilyTranslateException: DurationException for durationObject
            <music21.duration.Duration 5.0>: Could not determine durationNumber from complex

        Instead, split by components:

        >>> components = d.components
        >>> [str(lpc.lyMultipliedDurationFromDuration(c)) for c in components]
        ['1 ', '4 ']
        z%DurationException for durationObject z: Nr   z,Cannot translate an object of zero duration r€   g      à?z\breveg      Ð?z\longaz*Cannot support durations longer than longaz3DurationException: Cannot translate durationObject )
r
   ÚconvertTypeToNumberrø   ÚDurationExceptionrŠ   r�   rZ   ÚLyStenoDurationÚdotsÚLyMultipliedDuration)rj   ró  Únumber_typeÚdeÚstenoDurationÚmultipliedDurations         r   r  z2LilypondConverter.lyMultipliedDurationFromDurationê  sr  € ðT	MÝ"Ô6°{Ô7GÑHÔHˆKˆKøÝÔ)ð 	Mð 	Mð 	MÝ(ØK¸ÐKÐKÀrÐKÐKñMô Mð Møøøøð	Møøøð ˜!ÒÐÝ(ØL¸{ÐLÐLñNô Nð Nð ˜Š?ˆ?Ø˜cÒ!Ð!Ø'��Ø Ò$Ð$Ø'��å,Ð-YÑZÔZÐZå˜kÑ*Ô*ˆKð	[ÝÔ/°½SÀÔAQÑ=RÔ=RÑSÔSˆMÝ!$Ô!9¸-Ñ!HÔ!HÐÐøÝÔ)ð 	[ð 	[ð 	[Ý(ØYÀkÐYÐYÐUWÐYÐYñ[ô [ð [øøøøð	[øøøð "Ð!s,   ‚ œA«A Á AÂ;C ÃC<Ã"C7Ã7C<c                ó@  — t          g d¢¦  «        }|j        }d}|                     ¦   «         D ]\  }}||v r|} n Œt                               d|› �¦  «         d}t          j        ¦   «         }|j        dz   |                     |¦  «        z   |j	        z   }||_
        |S )aÂ  
        converts a Clef object to a
        lilyObjects.LyEmbeddedScm object

        >>> tc = clef.TrebleClef()
        >>> conv = lily.translate.LilypondConverter()
        >>> lpEmbeddedScm = conv.lyEmbeddedScmFromClef(tc)
        >>> print(lpEmbeddedScm)
        \clef "treble"

        >>> t8c = clef.Treble8vbClef()
        >>> lpEmbeddedScm = conv.lyEmbeddedScmFromClef(t8c)
        >>> print(lpEmbeddedScm)
        \clef "treble_8"

        ))ÚTreble8vbClefÚtreble_8)Ú
TrebleClefÚtreble)ÚBassClefÚbass)ÚAltoClefÚalto)Ú	TenorClefÚtenor)ÚSopranoClefÚsoprano)ÚPercussionClefÚ
percussionNz8got a clef that lilypond does not know what to do with: r$   zclef )r   r°   Úitemsrq   Ú
printDebugrZ   r�   r‹   rŒ   ÚnewlineIndentÚcontent)	rj   ÚclefObjÚdictTranslater-   ÚlilyNameÚm21ClassÚlilyStrÚlpEmbeddedScmÚ
clefSchemes	            r   rƒ  z'LilypondConverter.lyEmbeddedScmFromClef0  sá   € õ$ $ð %
ð %
ð %
ñ ô ˆð ŒOˆØˆØ!.×!4Ò!4Ñ!6Ô!6ð 	ð 	ÑˆH�gØ˜1ˆ}ˆ}Ø"�Ø�ð õ ×#Ò#ØTÈ7ÐTÐTñVô Vð VàˆHåÔ)Ñ+Ô+ˆØ#Ô-°Ñ7Ø%×1Ò1°(Ñ;Ô;ñ<à%Ô3ñ4ˆ
ð !+ˆÔØÐr   c                ó*  — t          |t          j        ¦  «        s|                     d¦  «        }|j        }|j        }|                      |¦  «        }t          j        ¦   «         }|j	        dz   |z   dz   |j	        z   |z   dz   |j
        z   }||_        |S )aÎ  
        converts a Key or KeySignature object
        to a lilyObjects.LyEmbeddedScm object

        >>> d = key.Key('d')
        >>> conv = lily.translate.LilypondConverter()
        >>> lpEmbeddedScm = conv.lyEmbeddedScmFromKeySignature(d)
        >>> print(lpEmbeddedScm)
        \key d \minor

        Major is assumed:

        >>> fSharp = key.KeySignature(6)
        >>> print(conv.lyEmbeddedScmFromKeySignature(fSharp))
        \key fis \major

        Úmajorzkey rÊ  )r  r   ÚKeyÚasKeyÚtonicr*  rä  rZ   r�   r‹   r  r  )rj   ÚkeyObjr  ÚmÚpnr  Ú	keySchemes          r   r„  z/LilypondConverter.lyEmbeddedScmFromKeySignature^  s¶   € õ& ˜&¥#¤'Ñ*Ô*ð 	+Ø—\’\ 'Ñ*Ô*ˆFàŒLˆØŒKˆà×#Ò# AÑ&Ô&ˆåÔ)Ñ+Ô+ˆØ"Ô,ØñØ "ñ#àñð %Ô.ñ/ð 23ñ3ð ñ	ð
 %Ô2ñ3ˆ	ð !*ˆÔØÐr   c                ón   — t          j        ¦   «         }|j        dz   |j        z   |j        z   }||_        |S )a&  
        convert a :class:`~music21.meter.TimeSignature` object
        to a lilyObjects.LyEmbeddedScm object

        >>> ts = meter.TimeSignature('3/4')
        >>> conv = lily.translate.LilypondConverter()
        >>> print(conv.lyEmbeddedScmFromTimeSignature(ts))
        \time 3/4
        ztime )rZ   r�   r‹   ÚratioStringr  r  )rj   Útsr  r!  s       r   r…  z0LilypondConverter.lyEmbeddedScmFromTimeSignatureƒ  s<   € õ Ô)Ñ+Ô+ˆØ!Ô+¨gÑ5¸¼ÑFÈÔIdÑdˆ	Ø )ˆÔØÐr   c                ód  — |j         j        sdS |j         j        d         j        dk    r†t          t	          |j         j        d         j        d         ¦  «        ¦  «        }t          t	          |j         j        d         j        d         ¦  «        ¦  «        }|                      ||¦  «        }|S dS )u&  
        if the inObj has tuplets then we set a new context
        for the tuplets and anything up till a tuplet stop.

        Note that a broken tuplet (Ã  la Michael Gordon)
        will not work.

        If there are no tuplets, this routine does
        nothing.  If there are tuplets, and they have type "start", then
        it returns an lpMusicList object, which is the new context

        For now, no support for nested tuplets.  They're an
        easy extension, but there's too much
        else that is missing to do it now.
        Nr   rŸ  )r
   Útupletsrø   r'   r�   ÚtupletNormalÚtupletActualÚsetContextForTimeFraction)rj   ÚinObjÚ	numeratorÚdenominatorr  s        r   r�  z*LilypondConverter.setContextForTupletStart“  sœ   € ð  Œ~Ô%ð 	Ø�4ØŒ^Ô# AÔ&Ô+¨wÒ6Ð6Ý�C ¤Ô 6°qÔ 9Ô FÀqÔ IÑJÔJÑKÔKˆIÝ�c %¤.Ô"8¸Ô";Ô"HÈÔ"KÑLÔLÑMÔMˆKØ×8Ò8¸ÀKÑPÔPˆKØÐà�4r   c                óœ  — t          |¦  «        dz   t          |¦  «        z   }t          j        ¦   «         }t          j        |¬¦  «        }t          j        d||¬¦  «        }| j        j        }|€t          d| j        ›d�¦  «        ‚|                     |¦  «         | 	                    | j        ¦  «         |  
                    |¦  «         |S )a4  
        Explicitly starts a new context for scaled music (tuplets, etc.)
        for the given numerator and denominator (either an int or a string or unicode)

        Returns an lpMusicList object contained in an lpSequentialMusic object
        in an lpPrefixCompositeMusic object which sets the times object to a particular
        fraction.

        >>> lpc = lily.translate.LilypondConverter()
        >>> lpc.context
        <music21.lily.lilyObjects.LyLilypondTop>
        >>> lyTop = lpc.context
        >>> lyoMusicList = lpc.setContextForTimeFraction(5, 4)
        >>> lyoMusicList
        <music21.lily.lilyObjects.LyMusicList>
        >>> lpc.context
        <music21.lily.lilyObjects.LyMusicList>
        >>> lpc.context is lyoMusicList
        True
        >>> lpc.context.getParent()
        <music21.lily.lilyObjects.LySequentialMusic {  }>
        >>> lpc.context.getParent().getParent()
        <music21.lily.lilyObjects.LyPrefixCompositeMusic \times 5/4...>
        >>> lpc.context.getParent().getParent().fraction
        '5/4'
        >>> lpc.context.getParent().getParent().type
        'times'
        >>> lpc.context.getParent().getParent().getParent()
        <music21.lily.lilyObjects.LyLilypondTop \times 5/4...>
        >>> lpc.context.getParent().getParent().getParent() is lyTop
        True
        ú/r-  Útimes©rø   Úfractionrá   Nz'Cannot find contents for self.context: rÊ  )r'   rZ   rü   r6  r   r^   rÏ   rŠ   r—   rd  r˜   )rj   r+  r,  r1  r  rA  rñ   ÚcurrentContentss           r   r)  z+LilypondConverter.setContextForTimeFraction­  sä   € õB �y‘>”> CÑ'­#¨kÑ*:Ô*:Ñ:ˆÝ”oÑ'Ô'ˆÝÔ1¸KÐHÑHÔHÐõ
 "%Ô!;ÀØEMØBSð"Uñ "Uô "UÐð œ,Ô/ˆØÐ"Ý(ØK¸$¼,ÐKÐKÐKñMô Mð Mð 	×ÒÐ5Ñ6Ô6Ð6Ø×(Ò(¨¬Ñ6Ô6Ð6Ø�Š˜Ñ$Ô$Ð$ØÐr   c                ó„   — |j         j        sdS |j         j        d         j        dk    r|                      ¦   «          dS dS )z5
        Reverse of setContextForTupletStart
        Nr   r   )r
   r&  rø   rœ   )rj   r*  s     r   r“  z)LilypondConverter.setContextForTupletStopâ  sK   € ð Œ~Ô%ð 	ØˆFØŒ^Ô# AÔ&Ô+¨vÒ5Ð5Ø×ÒÑ!Ô!Ð!Ð!Ð!à�4r   Fc                óø  — g }g }t          |t          j        ¦  «        rp|}|                     |¦  «        }|                      |||¬¦  «        }|                      |¦  «        }	|                     |¦  «         |                     |	¦  «         �n`t          |t          ¦  «        �rJd}
i }|D ]?}|j        r|j        d         }nd}||v r||                              |¦  «         Œ9|g||<   Œ@|D ]¸}||         }t          |¦  «        dk    rK|d         }|                     |¦  «        }|                      |||¬¦  «        }|                     |¦  «         n2|  
                    |||¬¦  «        }|\  }}|                     |¦  «         |
|j        j        k     r|j        j        }
|}Œ¹|                      |¦  «        }	|                     |	¦  «         |D ]}| j                             |¦  «         Œt          j        ¦   «         }||_        t          j        ¦   «         }||_        t          j        ¦   «         }||_        | j        }|j        }|                     |¦  «         |                     | j        ¦  «         dS )z`
        Create a new context from the variant object or a list of variants and append.
        rz  éÿÿÿÿr   r   r€   r^  N)r  r   r±   ÚreplacedElementsÚ!lyPrefixCompositeMusicFromVariantrR  r—   Úlistr  ra  Ú)lyPrefixCompositeMusicFromRelatedVariantsr
   r  r`   rZ   rü   rÏ   r!  r  r   r"  r^   rd  )rj   ÚvariantObjectOrListr_  rd   r  ÚlongestReplacedElementsÚvariantObjectr6  r  ÚlpSequentialMusicStandardÚlongestReplacementLengthÚvariantDictr  Úvariant_keyrh  ÚvarTupler  rm  rl  rk  ro  rp  s                         r   rc  z*LilypondConverter.appendContextFromVariantí  sñ  € ð ˆ	Ø"$ÐåÐ)­7¬?Ñ;Ô;ð -	,Ø/ˆMØ,×=Ò=¸jÑIÔIÐØ,0×,RÒ,RØÐ/Àð -Sñ -ô -Ð)ð )-×(HÒ(HÐIYÑ(ZÔ(ZÐ%Ø×ÒÐ:Ñ;Ô;Ð;Ø×ÒÐ6Ñ7Ô7Ð7Ñ7åÐ+­TÑ2Ô2ñ #	,Ø')Ð$ØˆKØ!4ð ?ð ?�Ø Ô'ð ,Ø"/Ô"6°qÔ"9�K�Kà"+�KØ +Ð-Ð-Ø Ô,×3Ò3°MÑBÔBÐBÐBà0=¨�K Ñ,Ð,à*ð ?ð ?�Ø)¨+Ô6�Ý�{Ñ#Ô# qÒ(Ð(Ø$/°¤N�MØ'4×'EÒ'EÀjÑ'QÔ'QÐ$Ø48×4ZÒ4ZØ%Ð'7Èð 5[ñ 5Zô 5ZÐ1à×$Ò$Ð%BÑCÔCÐCÐCà#×MÒMØ#°
ÈOð  Nñ  ]ô  ]�HàFNÑCÐ1Ð3CØ×$Ò$Ð%BÑCÔCÐCà+Ð.>Ô.GÔ.UÒUÐUØ/?Ô/HÔ/VÐ,Ø.>Ð+øà(,×(HÒ(HÐI`Ñ(aÔ(aÐ%à×ÒÐ6Ñ7Ô7Ð7Ø-ð ,ð ,�ØÔ ×'Ò'¨Ñ+Ô+Ð+Ð+å”Ñ(Ô(ˆØ )ˆÔÝ"Ô6Ñ8Ô8ÐØ)5ÐÔ&Ý!Ô4Ñ6Ô6ÐØ0DÐÔ-àœˆØ(Ô1ÐØ×ÒÐ 3Ñ4Ô4Ð4Ø×%Ò% d¤lÑ3Ô3Ð3Ð3Ð3r   c                óL  ‡$— d„ Š$|                      ˆ$fd„¬¦  «         |d                              |¦  «        }|d         }|j        p|                     t          j        ¦  «        }|d                              t
          j        ¦  «        }|€|d                              d¦  «        }|d                              d|¦  «         |d         j        d         }|| j	        v rd}	n| j	         
                    |¦  «         d	}	t          |j        ¦  «        }
t          j        t          |¦  «        |
z   ¦  «        }|d	u r)| j        | j	                             |¦  «        d
z           }nd}g }d}d}d	| _        |D �]Å} ‰$|j        ¦  «        }||k     rt'          d¦  «        ‚||z
  }|j        |z   }|dk    rUt+          j        ¦   «         }d	|j        _        ||j        _        |                      |¦  «        }| 
                    |¦  «         |d	u r-|j                             ¦   «         j        D ]}||j        _        Œ|j        }tA          j!        |j         "                    ||¬¦  «        ¦  «        }|j        |_        |j        }|j        |z
  }||k    r~tG          j$        ||z  ¦  «        \  }}tK          |¦  «        dz   tK          |¦  «        z   }|  &                    |¦  «        }t          j'        d||¬¦  «        }t          j(        |¬¦  «        }n|  &                    |¦  «        }| 
                    |¦  «         |}�ŒÇ|                     |d	¬¦  «        }t          j)        |¦  «        } t          j(        | ¬¦  «        }!|	rdnd}"t          j'        |"|d|!¬¦  «        }#d| _        |#|fS )aí
  

        >>> s1 = converter.parse('tinynotation: 4/4 a4 a a a  a1')
        >>> s2 = converter.parse('tinynotation: 4/4 b4 b b b')
        >>> s3 = converter.parse('tinynotation: 4/4 c4 c c c')
        >>> s4 = converter.parse('tinynotation: 4/4 d4 d d d')
        >>> s5 = converter.parse('tinynotation: 4/4 e4 e e e  f f f f  g g g g  a a a a  b b b b')

        >>> for s in [ s1, s2, s3, s4, s5]:
        ...     s.makeMeasures(inPlace=True)

        >>> activeSite = stream.Part(s5.elements)

        >>> v1 = variant.Variant()
        >>> for el in s1:
        ...     v1.append(el)
        >>> v1.replacementQuarterLength = 4.0

        >>> v2 = variant.Variant()
        >>> sp2 = note.Rest()
        >>> sp2.style.hideObjectOnPrint = True
        >>> sp2.duration.quarterLength = 4.0
        >>> v2.replacementQuarterLength = 4.0
        >>> v2.append(sp2)
        >>> for el in s2:
        ...     v2.append(el)

        >>> v3 = variant.Variant()
        >>> sp3 = note.Rest()
        >>> sp3.style.hideObjectOnPrint = True
        >>> sp3.duration.quarterLength = 8.0
        >>> v3.replacementQuarterLength = 4.0
        >>> v3.append(sp3)
        >>> for el in s3:
        ...     v3.append(el)

        >>> v4 = variant.Variant()
        >>> sp4 = note.Rest()
        >>> sp4.style.hideObjectOnPrint = True
        >>> sp4.duration.quarterLength = 16.0
        >>> v4.replacementQuarterLength = 4.0
        >>> v4.append(sp4)
        >>> for el in s4:
        ...     v4.append(el)

        >>> variantList = [v4, v1, v3, v2]
        >>> for v in variantList :
        ...     v.groups = ['london']
        ...     activeSite.insert(0.0, v)

        >>> lpc = lily.translate.LilypondConverter()

        >>> print(lpc.lyPrefixCompositeMusicFromRelatedVariants(variantList,
        ...                activeSite=activeSite)[0])
        \new Staff  = london... { { \times 1/2 {\startStaff \clef "treble"
              a' 4
              a' 4
              a' 4
              a' 4
              \clef "treble"
              | %{ end measure 1 %}
              a' 1
              | %{ end measure 2 %}
               \stopStaff}
               }
        <BLANKLINE>
          {\startStaff \clef "treble"
            b... 4
            b... 4
            b... 4
            b... 4
            | %{ end measure 1 %}
             \stopStaff}
        <BLANKLINE>
          {\startStaff \clef "treble"
            c' 4
            c' 4
            c' 4
            c' 4
            | %{ end measure 1 %}
             \stopStaff}
        <BLANKLINE>
          s 1
          {\startStaff \clef "treble"
            d' 4
            d' 4
            d' 4
            d' 4
            | %{ end measure 1 %}
             \stopStaff}
        <BLANKLINE>
           }
        <BLANKLINE>

        c                óŠ   — | D ]?}t          |t          j        ¦  «        r|j        j        rŒ)|                      |¦  «        c S d S r   )r  r   ru  r¦  r¨  ÚelementOffset)ÚinputStreamr  s     r   Ú!findOffsetOfFirstNonSpacerElementzfLilypondConverter.lyPrefixCompositeMusicFromRelatedVariants.<locals>.findOffsetOfFirstNonSpacerElement–  sX   € Ø!ð 9ð 9�Ý˜b¥$¤)Ñ,Ô,ð 9°´Ô1Kð 9Øà&×4Ò4°RÑ8Ô8Ð8Ð8Ð8ð	9ð 9r   c                ó$   •—  ‰| j         ¦  «        S r   )Ú_stream)ÚvvrF  s    €r   ú<lambda>zMLilypondConverter.lyPrefixCompositeMusicFromRelatedVariants.<locals>.<lambda>�  s   ø€ Ð(IÐ(IÈ"Ì*Ñ(UÔ(U€ r   r   r   Nr§   r  FTé   z%Should not have overlapping variants.)Ú	offsetEndr.  r/  r0  r-  )ÚincludeSpacersrõ   r^   rö   r÷   )*Úsortr6  r   ÚgetContextByClassrw  r   r­   r´   r  rb   r—   r.   rý   rZ   rþ   rc   Úindexre   rH  rŠ   ÚreplacementQuarterLengthr   ru  r¦  r¨  r
   r  r’  r¨   ÚnotesAndRestsr§  ÚcontainedHighestTimer   r±   ÚgetElementsByOffsetr   ÚdecimalToTupletr'   ÚlyOssiaMusicFromVariantr   r6  rü   )%rj   rh  r_  rd   r6  Úre0ÚreplacedElementsClefÚvariantContainerStreamr  Ú
newVariantÚcontainerIdr  r§  r  ÚhighestOffsetSoFarÚlongestVariantr  ÚfirstOffsetr
  ÚspacerÚlySpacerÚnÚ	endOffsetÚ	vStrippedÚreplacedElementsLengthÚvariantLengthr+  r,  r1  ÚlpOssiaMusicVariantPreFractionÚlpVariantTupletÚlpOssiaMusicVariantr  ÚlpInternalSequentialMusicrZ  r  rF  s%                                       @r   r9  z;LilypondConverter.lyPrefixCompositeMusicFromRelatedVariants/  s  ø€ ðN	9ð 	9ð 	9ð 	×ÒÐUÐUÐUÐUÐÑVÔVÐVð ' qœ>×:Ò:¸:ÑFÔFÐØ˜qÔ!ˆØ"œxÐK¨3×+@Ò+@ÅÄÑ+KÔ+KÐà!,¨Q¤×!AÒ!AÅ&Ä+Ñ!NÔ!NÐØ!Ð)Ø%0°¤^×%EÒ%EÀhÑ%OÔ%OÐ"à�AŒ×Ò˜cÐ#7Ñ8Ô8Ð8Ø! !”nÔ+¨AÔ.ˆØ˜$Ô,Ð,Ð,ØˆJˆJàÔ×%Ò% kÑ2Ô2Ð2ØˆJå'Ð(>Ô(AÑBÔBˆÝÔ$Õ%6°{Ñ%CÔ%CÀkÑ%QÑRÔRˆ	à˜dÐ"Ð"ØÔ& tÔ'9×'?Ò'?ÀÑ'LÔ'LÈqÑ'PÔQˆEˆEàˆEð ˆ	Ø ÐØˆàˆÔàð 4	ñ 4	ˆAð <Ð;¸A¼IÑFÔFˆKàÐ/Ò/Ð/Ý,Ð-TÑUÔUÐUà(Ð+=Ñ=ˆNØ!"Ô!;¸kÑ!IÐð  Ò#Ð#Ýœ™œ�Ø15�”Ô.Ø0>�”Ô-à×;Ò;¸FÑCÔC�Ø× Ò  Ñ*Ô*Ð*à $Ð&Ð&Øœ×*Ò*Ñ,Ô,Ô:ð *ð *�AØ$)�A”G”M�Mð Ô.ˆIÝœ¨¬	×(EÒ(EÀkØPYð )Fñ )[ô )[ñ \ô \ˆIà12Ô1KˆIÔ.à%.Ô%GÐ"Ø%Ô:¸[ÑHˆMàÐ 6Ò6Ð6Ý)/Ô)?Ø*¨]Ñ:ñ*<ô *<Ñ&�	˜;å˜y™>œ>¨CÑ/µ#°kÑ2BÔ2BÑB�Ø15×1MÒ1MÈiÑ1XÔ1XÐ.Ý"%Ô"<À'ØFNØCað#cñ #cô #c�õ '*Ô&;ÀoÐ&VÑ&VÔ&VÐ#Ð#à&*×&BÒ&BÀ9Ñ&MÔ&MÐ#à×ÒÐ0Ñ1Ô1Ð1àˆN‰Nð *×:Ò:¸:ÐVZÐ:Ñ[Ô[Ðå”o iÑ0Ô0ˆÝ$'Ô$9ÀKÐ$PÑ$PÔ$PÐ!à&0Ð?˜U˜U°iÐÝ(+Ô(BØ#Ø Ø Ø+ð	)-ñ )-ô )-Ð%ð !ˆÔà,Ð.>Ð>Ð>r   c                ó  — |d                               t          j        ¦  «        }|                      t          j        ¦  «        }|€|                      d¦  «        }|�||j        vr|                     d|¦  «         |j        r|j        d         }nd}|| j        v rd}n| j         	                    |¦  «         d}t          |j        ¦  «        }t          j        t          |¦  «        |z   ¦  «        }	|du rU| j        | j                             |¦  «        dz           }
|j                             ¦   «         j        D ]}|
|j        _        Œg }d„ |                     t,          j        ¦  «        D ¦   «         }|rd|d         }|j        j        }|j        j        d	k    r*|                      |¦  «        }| 	                    |¦  «         |                     |¦  «         nd	}|                      |¦  «        }|j        }|j        |z
  }d| _        ||k    r~tA          j!        ||z  ¦  «        \  }}tE          |¦  «        d
z   tE          |¦  «        z   }t          j#        d||¬¦  «        }t          j$        |¬¦  «        }| 	                    |¦  «         n| 	                    |¦  «         t          j%        |¦  «        }t          j$        |¬¦  «        }|du rt          j#        d|	d|¬¦  «        }nt          j#        d|	d|¬¦  «        }d| _        |S )a…  

        >>> pStream = converter.parse('tinynotation: 4/4 a4 b c d   e4 f g a')
        >>> pStream.makeMeasures(inPlace=True)
        >>> p = stream.Part(pStream.elements)
        >>> p.id = 'p1'
        >>> vStream = converter.parse('tinynotation: 4/4 a4. b8 c4 d')
        >>> vStream.makeMeasures(inPlace=True)
        >>> v = variant.Variant(vStream.elements)
        >>> v.groups = ['london']
        >>> p.insert(0.0, v)
        >>> lpc = lily.translate.LilypondConverter()
        >>> replacedElements = v.replacedElements()
        >>> lpPrefixCompositeMusicVariant = lpc.lyPrefixCompositeMusicFromVariant(v,
        ...                                                            replacedElements)
        >>> print(lpPrefixCompositeMusicVariant)  # ellipses are for non-byte fix-ups
        \new Staff  = londonpx { {\startStaff \clef "treble"
            a' 4.
            b...
            c' 4
            d' 4
            | %{ end measure 1 %}
             \stopStaff}
           }

        >>> replacedElements.show('text')
        {0.0} <music21.stream.Measure 1 offset=0.0>
            {0.0} <music21.clef.TrebleClef>
            {0.0} <music21.meter.TimeSignature 4/4>
            {0.0} <music21.note.Note A>
            {1.0} <music21.note.Note B>
            {2.0} <music21.note.Note C>
            {3.0} <music21.note.Note D>

        >>> print(lpc.addedVariants)
        ['london']

        r   Nr§   r   FTrK  c                ó*   — g | ]}|j         j        ¯|‘ŒS r   )r¦  r¨  )Ú.0Úrs     r   ú
<listcomp>zGLilypondConverter.lyPrefixCompositeMusicFromVariant.<locals>.<listcomp>S  s1   € ð 3ð 3ð 3˜1ØœÔ1ð3�Qð 3ð 3ð 3r   r  r.  r/  r0  r-  rõ   rö   r÷   r^   )&rO  r   rw  r   r­   Úelementsr´   r  rb   r—   r.   rý   rZ   rþ   rc   rP  rH  r¨   rR  r¦  r§  r  r   ru  r
   r  r’  ÚremoverV  rQ  rS  re   r   rU  r'   r   r6  rü   )rj   r<  r6  rd   rX  rY  r  rZ  r[  r  r§  ra  r  Ú	varFilterr_  Ú	spacerDurr`  rh  rd  re  r+  r,  r1  rg  ri  r  ÚlpOssiaMusicVariantWithSpacerr  s                               r   r7  z3LilypondConverter.lyPrefixCompositeMusicFromVariant
  s]  € ðV  0°Ô2×DÒDÅTÄYÑOÔOÐà!.×!@Ò!@ÅÄÑ!MÔ!MÐØ!Ð)Ø%2×%DÒ%DÀXÑ%NÔ%NÐ"àÐ+Ø#¨=Ô+AÐAÐAØ×$Ò$ QÐ(<Ñ=Ô=Ð=àÔð 	$Ø'Ô.¨qÔ1ˆKˆKà#ˆKØ˜$Ô,Ð,Ð,ØˆJˆJàÔ×%Ò% kÑ2Ô2Ð2ØˆJå'Ð(>Ô(AÑBÔBˆÝÔ$Õ%6°{Ñ%CÔ%CÀkÑ%QÑRÔRˆ	à˜dÐ"Ð"ØÔ& tÔ'9×'?Ò'?ÀÑ'LÔ'LÈqÑ'PÔQˆEØ"Ô*×2Ò2Ñ4Ô4ÔBð &ð &�Ø %�””�àˆ	ð3ð 3 × @Ò @ÅÄÑ KÔ Kð 3ñ 3ô 3ˆ	ð ð 	Ø˜q”\ˆFØœÔ5ˆIØŒÔ,¨sÒ2Ð2Ø×;Ò;¸FÑCÔC�Ø× Ò  Ñ*Ô*Ð*Ø× Ò  Ñ(Ô(Ð(Ð(àˆIà"×:Ò:¸=ÑIÔIÐà!.Ô!GÐØ%Ô:¸YÑFˆàˆÔØÐ2Ò2Ð2Ý%+Ô%;Ð<RÐUbÑ<bÑ%cÔ%cÑ"ˆI�{Ý˜9‘~”~¨Ñ+­c°+Ñ.>Ô.>Ñ>ˆHÝ!Ô8¸gØBJØ?RðTñ Tô TˆOõ ),Ô(=ÈÐ(XÑ(XÔ(XÐ%Ø×ÒÐ6Ñ7Ô7Ð7Ð7à×ÒÐ0Ñ1Ô1Ð1å”o iÑ0Ô0ˆÝ(+Ô(=ÈÐ(TÑ(TÔ(TÐ%à˜ÐÐÝ,/Ô,FØØ$Ø$Ø3ð	-5ñ -5ô -5Ð)Ð)õ -0Ô,FØØ$Ø$Ø3ð	-5ñ -5ô -5Ð)ð, !ˆÔà,Ð,r   c                óV  — g }t          j        |¬¦  «        }t          j        |¬¦  «        }|                      |¦  «         d| _        |                      |j        ¦  «         |                      ¦   «         }|�|                     |¦  «         |  	                    ¦   «          d| _        |S )a  
        returns a LyOssiaMusic object from a stream

        >>> c = converter.parse('tinynotation: 3/4 C4 D E F2.')
        >>> v = variant.Variant(c.elements)
        >>> lpc = lily.translate.LilypondConverter()
        >>> lySequentialMusicOut = lpc.lySequentialMusicFromStream(v)
        >>> lySequentialMusicOut
        <music21.lily.lilyObjects.LySequentialMusic { \clef "b...>
        >>> print(lySequentialMusicOut)
        { \clef "bass"
         \time 3/4
         c 4
         d 4
         e 4
         \bar "|"  %{ end measure 1 %}
         f 2.
         \bar "|."  %{ end measure 2 %}
          }
        <BLANKLINE>
        rN  r-  TNF)
rZ   rü   ÚLyOssiaMusicr˜   re   rO  rH  rP  r—   rœ   )rj   Ú	variantInr  r  ÚlpOssiaMusicrQ  s         r   rV  z)LilypondConverter.lyOssiaMusicFromVariant¥  sª   € ð, ˆ	å”o¨yÐ9Ñ9Ô9ˆÝÔ'°+Ð>Ñ>Ô>ˆØ�Š˜Ñ$Ô$Ð$àˆÔØ×-Ò-¨iÔ.?Ñ@Ô@Ð@à×$Ò$Ñ&Ô&ˆØÐØ×Ò˜XÑ&Ô&Ð&à×ÒÑÔÐà ˆÔàÐr   c                ó  — |€t          j        ¦   «         }|j        €t          j        ¦   «         }||_        n|j        }|j        }|�¸|j        }|rSt          j        dt          j        |¬¦  «        ¬¦  «        }|                     |¦  «         | 	                    |¦  «         |j
        }|rSt          j        dt          j        |¬¦  «        ¬¦  «        }|                     |¦  «         | 	                    |¦  «         ||_        |S )aÎ  
        Returns a lilypond.lilyObjects.LyLilypondHeader object
        set with data from the metadata object

        >>> md = metadata.Metadata()
        >>> md.title = 'My Title'
        >>> md.alternativeTitle = 'My "sub"-title'

        >>> lpc = lily.translate.LilypondConverter()
        >>> lpHeader = lpc.setHeaderFromMetadata(md)
        >>> print(lpHeader)
        \header { title = "My Title"
        subtitle = "My \"sub\"-title"
        }
        NÚtitle)Ústring)ÚassignmentIdÚidentifierInitÚsubtitle)rZ   rÇ   ÚlilypondHeaderBodyÚLyLilypondHeaderBodyÚassignmentsÚ	bestTitleÚLyAssignmentÚLyIdentifierInitr—   rd  ÚalternativeTitle)	rj   ÚmetadataObjectr½   ÚlpHeaderBodyÚlpHeaderBodyAssignmentsry  ÚlyTitleAssignmentr}  ÚlySubtitleAssignments	            r   rÊ   z'LilypondConverter.setHeaderFromMetadataÎ  sD  € ð$ ÐÝÔ+Ñ-Ô-ˆHàÔ&Ð.ÝÔ3Ñ5Ô5ˆLØ*6ˆHÔ'Ð'à#Ô6ˆLà".Ô":ÐàÐ%Ø"Ô,ˆEØð :Ý$'Ô$4À'ÝDGÔDXØ@EðEGñ EGô EGð%7ñ %7ô %7Ð!ð (×.Ò.Ð/@ÑAÔAÐAØ!×+Ò+¨LÑ9Ô9Ð9à%Ô6ˆHØð =Ý'*Ô'7ÀZÝGJÔG[ØCKðHMñ HMô HMð(:ñ (:ô (:Ð$ð (×.Ò.Ð/CÑDÔDÐDØ$×.Ò.¨|Ñ<Ô<Ð<à#:ˆÔ Øˆr   c                óŠ  — | j         }d| _         |€dS | j        du rd}t          j        ¦   «         }|du rd}n]|j        €!|j        dz   |                     d¦  «        z   }n5|j        dz   |                     | j        |j        j                 ¦  «        z   }|j	        � || 
                    d|j	        › �¦  «        z  }||_        |S )aÅ  
        return a LyObject or None for the end of the previous Measure

        uses self.currentMeasure

        >>> lpc = lily.translate.LilypondConverter()
        >>> m = stream.Measure()
        >>> m.number = 2
        >>> m.rightBarline = 'double'
        >>> lpc.currentMeasure = m
        >>> lyObj = lpc.closeMeasure()
        >>> lpc.currentMeasure is None
        True
        >>> print(lyObj)
        \bar "||"  %{ end measure 2 %}
        NTr;   zbar zend measure )ra   re   rZ   r�   ÚrightBarliner‹   rŒ   ÚbarlineDictrø   ÚnumberÚcommentr  )rj   ÚbarChecksOnlyr  Ú	lpBarlineÚ	barStrings        r   rP  zLilypondConverter.closeMeasure	  sì   € ð$ ÔˆØ"ˆÔØˆ9Ø�4ð Ô˜tÐ#Ð#Ø ˆMåÔ%Ñ'Ô'ˆ	à˜DÐ Ð ØˆIˆIØŒ^Ð#Ø!Ô+¨fÑ4°y×7LÒ7LÈSÑ7QÔ7QÑQˆIˆIà!Ô+¨fÑ4°y×7LÒ7LØÔ  ¤Ô!4Ô5ñ87ô 87ñ 7ˆIð Œ8ÐØ˜×*Ò*Ð+D¸!¼(Ð+DÐ+DÑEÔEÑEˆIà%ˆ	ÔØÐr   c                óD  — |j         }|dk    rdS |                     ¦   «         }|sd}n|d         }|j        j        }||z
  }|dk    rt	          d¦  «        ‚t          |dz  ¦  «        }t          j        ¦   «         }|j        dz   t          |¦  «        z   dz   }	|	|_
        |S )a³  
        lilypond partial durations are very strange and are really of
        type LyMultipliedDuration.  You notate how many
        notes are left in the measure, for a quarter note, write "4"
        for an eighth, write "8", but for 3 eighths, write "8*3" !
        so we will measure in 32nd notes always. It won't work for tuplets
        of course.

        Returns a scheme object or None if not needed.

        >>> m = stream.Measure()
        >>> m.append(meter.TimeSignature('3/4'))
        >>> m.paddingLeft = 2.0
        >>> lpc = lily.translate.LilypondConverter()
        >>> outScheme = lpc.getSchemeForPadding(m)
        >>> print(outScheme)
        \partial 32*8
        r   Ng      @z*your first pickup measure is non-existent!é   zpartial 32*rÊ  )ÚpaddingLeftÚgetTimeSignaturesÚbarDurationr  rŠ   r�   rZ   r�   r‹   r'   r  )
rj   ÚmeasureObjectÚpLÚmeasureTimeSignaturesÚ	barLengthr$  ÚremainingQLÚremaining32srQ  Ú	schemeStrs
             r   r€  z%LilypondConverter.getSchemeForPadding/	  s½   € ð& Ô&ˆØ�Š7ˆ7Ø�4Ø -× ?Ò ?Ñ AÔ AÐØ$ð 	5ØˆIˆIà& qÔ)ˆBØœÔ4ˆIØ "‘nˆØ˜!ÒÐÝ(Ð)UÑVÔVÐVÝ˜;¨™?Ñ+Ô+ˆÝÔ$Ñ&Ô&ˆØÔ&¨Ñ6½¸\Ñ9JÔ9JÑJÈSÑPˆ	Ø$ˆÔØˆr   c                ó8  — t          | j        ¦  «        }|€t                               |d¬¦  «        }t	          j        |¦  «        | _        | j                             dd¬¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   | j        S )zË
        writes the contents of the self.topLevelObject to a file.

        The extension should be ly.  If fp is None then a named temporary
        file is created by environment.getTempFile.

        NF)ÚreturnPathlibÚwr|   r}   )	r'   r\   rq   ÚgetTempFileÚpathlibÚPathrg   ÚopenÚwrite)rj   ÚextÚfpÚtloOutÚfs        r   ÚwriteLyFilezLilypondConverter.writeLyFileU	  sÈ   € õ �TÔ(Ñ)Ô)ˆØˆ:Ý×)Ò)¨#¸UÐ)ÑCÔCˆBåœ RÑ(Ô(ˆŒàŒ]×Ò ¨gÐÑ6Ô6ð 	¸!Ø�GŠG�F‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð Œ}Ðs   Á(B
Â
BÂBc                ó^  — |                       ¦   «         }|€|                      d¬¦  «        }n|du r|                      d|¬¦  «        }d|z   dz   }|�|d|z   d	z   z  }|�|| j        |z   d	z   z  }|d
t          |¦  «        z   d	z   t          |¦  «        z   z  }t	          j        |¦  «         	 t	          j        t          |¦  «        dz   ¦  «         n# t          $ r Y nw xY wt          |¦  «        dz   |z   }t          j         	                    |¦  «        s…t          j         
                    |¦  «        }t          j         	                    |¦  «        sEt          dt          |¦  «        z   dz   t          |¦  «        z   dz   t          |¦  «        z   ¦  «        ‚|}t          j        |¦  «        S )aP  
        creates a .ly file from self.topLevelObject via .writeLyFile
        then runs the file through Lilypond.

        Returns the full path of the file produced by lilypond including the format extension.

        If skipWriting is True and a fileName is given then it will run
        that file through lilypond instead

        NÚly)r¦  F)r¦  r§  rû   z" z-f rÊ  z-o z.epsr>   zcannot find z or the full path z original file was )rx   rª  rY   r'   rt   Úsystemrp  r‰   ru   rr   ÚbasenamerŠ   r¢  r£  )	rj   ÚformatrV   ÚfileNameÚskipWritingrf   ÚlilyCommandÚfileFormÚfileEnds	            r   ÚrunThroughLilyz LilypondConverter.runThroughLilyi	  sÒ  € ð ×$Ò$Ñ&Ô&ˆØÐØ×'Ò'¨DÐ'Ñ1Ô1ˆHˆHà˜eÐ#Ð#Ø×+Ò+°¸Ð+ÑBÔB�à˜H‘n tÑ+ˆØÐØ˜5 6™>¨CÑ/Ñ/ˆKØÐØ˜4Ô-°Ñ7¸#Ñ=Ñ=ˆKà�u�s 8™}œ}Ñ,¨sÑ2µS¸±]´]ÑBÑBˆÝ
Œ	�+ÑÔÐð	ÝŒI•c˜(‘m”m fÑ,Ñ-Ô-Ð-Ð-øÝð 	ð 	ð 	ØˆDð	øøøå�x‘=”= 3Ñ&¨Ñ/ˆÝŒw�~Š~˜hÑ'Ô'ð 	å”g×&Ò& xÑ0Ô0ˆGÝ”7—>’> 'Ñ*Ô*ð VÝ,¨^½cÀ'¹l¼lÑ-JØ/Cñ.DÝFIÈ(ÁmÄmñ.Tà/Dñ.EåGJÈ8Á}Ä}ñ.Uñ Vô Vð Vð ˆHÝŒ|˜HÑ%Ô%Ð%s   Â-$C Ã
CÃCc                óN   — d| j         _        |                      dd|¬¦  «        }|S )zª
        create a PDF file from self.topLevelObject and return the filepath of the file.

        most users will just call stream.write('lily.pdf') on a stream.
        r$   rJ   Úpdf©rV   r¯  r°  ©rX   r  rµ  ©rj   r°  ÚlilyFiles      r   Ú	createPDFzLilypondConverter.createPDF”	  s.   € ð %'ˆÔÔ!Ø×&Ò&¨t¸EÈHÐ&ÑUÔUˆØˆr   c                óL  — |                       ¦   «         }|                     ¦   «         st          d¦  «        ‚t          j        dk    r#dt          |¦  «        › dt          |¦  «        › �}n%t          j        dk    rdt          |¦  «        › �}nd}t          j        |¦  «         dS )	a  
        create an SVG file from self.topLevelObject, show it with your pdf reader
        (often Adobe Acrobat/Adobe Reader or Apple Preview)
        and return the filepath of the file.

        most users will just call stream.Stream.show('lily.pdf') on a stream.
        z&Something went wrong with PDF CreationÚntzstart /wait z && del /f rn   zopen r$   N)	r¼  rr   ÚRuntimeErrorrt   rì  r'   Úsysrw   r­  )rj   ÚlFr�   s      r   ÚshowPDFzLilypondConverter.showPDFž	  sž   € ð �^Š^ÑÔˆØ�yŠy‰{Œ{ð 	IÝÐGÑHÔHÐHåŒ7�dŠ?ˆ?ØB¥S¨¡W¤WÐBÐB½¸R¹¼ÐBÐBˆGˆGÝŒ\˜XÒ%Ð%Ø'�c "™gœgÐ'Ð'ˆGˆGàˆGÝ
Œ	�'ÑÔÐÐÐr   c                ó2  — |                       dd|¬¦  «        }t          du ruddlm}m} 	 |                     t          |¦  «        ¦  «        }|                     |dd¦  «        }|                     t          |¦  «        ¦  «         n# t          $ r Y nw xY w|S )	zý
        create a PNG file from self.topLevelObject and return the filepath of the file.

        most users will just call stream.write('lily.png') on a stream.

        if PIL is installed then a small white border is created around the score
        ÚepsÚpngr¸  Fr   )ÚImageÚImageOpsé
   Úwhite)
rµ  ÚnoPILÚPILrÆ  rÇ  r¤  r'   ÚexpandÚsaver  )rj   r°  r»  rÆ  rÇ  Ú	lilyImageÚ
lilyImage2s          r   Ú	createPNGzLilypondConverter.createPNG²	  s°   € ð ×&Ò&¨u¸UÈXÐ&ÑVÔVˆÝ�Eˆ>ˆ>à+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ðØ!ŸJšJ¥s¨8¡}¤}Ñ5Ô5�	Ø%Ÿ_š_¨Y¸¸GÑDÔD�
Ø—’¥ H¡¤Ñ.Ô.Ð.Ð.øÝð ð ð Ø�ðøøøàˆs   «AB Â
BÂBc                óÜ   — 	 |                       ¦   «         }n4# t          $ r'}t          dt          |¦  «        z   dz   ¦  «        ‚d}~ww xY wt          ¦   «                              |d¬¦  «        S )a'  
        Take the object, run it through LilyPond, and then show it as a PNG file.
        On Windows, the PNG file will not be deleted, so you  will need to clean out
        TEMP every once in a while.

        Most users will just want to call stream.Stream.show('lily.png') instead.
        zProblems creating PNG file: (ú)NrÅ  ©Úfmt)rÐ  rŠ   r'   r   Úlaunch)rj   r»  Úes      r   ÚshowPNGzLilypondConverter.showPNGÇ	  s{   € ð	YØ—~’~Ñ'Ô'ˆHˆHøÝ%ð 	Yð 	Yð 	YÝ(Ð)HÍ3ÈqÉ6Ì6Ñ)QÐTWÑ)WÑXÔXÐXøøøøð	Yøøøõ ‰~Œ~×$Ò$ X°5Ð$Ñ9Ô9Ð9s   ‚ —
A¡"AÁAc                óN   — d| j         _        |                      dd|¬¦  «        }|S )z²
        create an SVG file from self.topLevelObject and return the filepath of the file.

        most users will just call stream.Stream.write('lily.svg') on a stream.
        r$   Úsvg)r¯  rV   r°  r¹  rº  s      r   Ú	createSVGzLilypondConverter.createSVGÖ	  s.   € ð %'ˆÔÔ!Ø×&Ò&¨e¸UÈXÐ&ÑVÔVˆØˆr   c                ór   — |                       |¦  «        }t          ¦   «                              |d¬¦  «        S )zÿ
        create an SVG file from self.topLevelObject, show it with your
        svg reader (often Internet Explorer on PC)
        and return the filepath of the file.

        most users will just call stream.Stream.show('lily.png') on a stream.
        rÙ  rÓ  )rÚ  r   rÕ  rº  s      r   ÚshowSVGzLilypondConverter.showSVGà	  s2   € ð —>’> (Ñ+Ô+ˆÝ‰~Œ~×$Ò$ X°5Ð$Ñ9Ô9Ð9r   )NT)Tr   )Nr%  )NNN)ró  rô  )NF)F)NN)r$   N)NNNF)?r   r   r   ÚlstripÚfictaDefrÅ   ÚsimplePaperDefinitionScmr  r†  rŽ   rí  rŒ  rk   rx   r]   r˜   rœ   r¥   rŸ   r¶   rµ   rÈ   ræ   rÿ   rç   rC  r5  rR  ré   rO  rb  r�  r‚  r’  r�  r‘  r—  r°  r©  rä  rå  r  rƒ  r„  r…  r�  r)  r“  rc  r9  r7  rV  rÊ   rP  r€  rª  rµ  r¼  rÂ  rÐ  r×  rÚ  rÜ  r   r   r   r0   r0   [   sª  € € € € € ð	çŠ‰Œð ð
	÷ 	Š‰Œð ð ÷ 	Š‰Œð ð	÷ 
Š‰Œð ð	÷ 
Š‰Œð ðçŠ‰Œð ð *0Ø(.Ø17Ø06Ø"&Ø!%Ø'+Ø&*ðð Ðð "Ø Ø%ØØ!Ø Ø"&Ø"'Ø#'Ø!%ààðð €Kð ð ð ð.ð ð ð0%.ð %.ð %.ðR"ð "ð "ð/ð /ð /ðð ð ð8!Cð !Cð !CðH()ð ()ð ()ð ()ðT )ð  )ð  )ð  )ðFð ð ð8Jð Jð JðX.ð .ð .ð .ð`["ð ["ð ["ð ["ðz2ð 2ð 2ð 2ðh6ð 6ð 6ðp"!ð "!ð "!ð "!ðP ØØðR&ð R&ð R&ð R&ðha:ð a:ð a:ðFU.ð U.ð U.ðn?1ð ?1ð ?1ðB0,ð 0,ð 0,ðdTð Tð Tðl<9ð <9ð <9ð|5ð 5ð 5ð4.ð .ð .ðbð ð ð,	ð 	ð 	ð
ð 
ð 
ðð ð ðD"ð D"ð D"ð D"ðL,ð ,ð ,ð\#ð #ð #ðJð ð ð ð ð ð43ð 3ð 3ðj	ð 	ð 	ð@4ð @4ð @4ð @4ðH >BØBGðY?ð Y?ð Y?ð Y?ð| ;@ðI-ð I-ð I-ð I-ðv'ð 'ð 'ðR1ð 1ð 1ð 1ðf,ð ,ð ,ð ,ð\#ð #ð #ðLð ð ð ð( %)Ø@Eð)&ð )&ð )&ð )&ðVð ð ð ðð ð ð(ð ð ð ð*:ð :ð :ðð ð ð ð	:ð 	:ð 	:ð 	:ð 	:ð 	:r   r0   c                  ó   — e Zd ZdS )rŠ   N)r   r   r   r   r   r   rŠ   rŠ   ì	  s   € € € € € Ø€Dr   rŠ   c                  ó(   — e Zd Z	 d„ Zd„ Zd„ Zd„ ZdS )ÚTestc                ón   — t          ¦   «         }t          d¦  «        }|                     |d¬¦  «         d S )Núbach/bwv66.6Fr«   )r0   r"   rµ   )rj   ÚlpcrÃ  s      r   ÚtestExplicitConvertChoralezTest.testExplicitConvertChoraleó	  s9   € ÝÑ!Ô!ˆÝ  Ñ0Ô0ˆØ×Ò °ÐÑ6Ô6Ð6Ð6Ð6r   c                óâ  — ddl m} t          j        ¦   «         }t	          j        d¦  «        }d|j        _        |                      |j        j	        d¦  «         t	          j        d¦  «        }d|j        _        | 
                    |                     d¦  «        ¦  «         | 
                    |¦  «         | 
                    |¦  «         t          ¦   «         }|                     |¦  «         d S )	Nr   ©ÚmeterÚCg      @rr  ÚD4g      ø?z4/4)Úmusic21ré  r   r§   r   rt  r
   r  ÚassertEqualrø   r—   ry  r0   rµ   )rj   ré  r¤   Ún1Ún2rå  s         r   ÚtestComplexDurationzTest.testComplexDurationù	  sË   € Ø!Ð!Ð!Ð!Ð!Ð!ÝŒM‰OŒOˆÝŒY�s‰^Œ^ˆØ$'ˆŒÔ!Ø×Ò˜œÔ)¨9Ñ5Ô5Ð5ÝŒY�t‰_Œ_ˆØ$'ˆŒÔ!Ø	�Š�×$Ò$ UÑ+Ô+Ñ,Ô,Ð,Ø	�Š�‰ŒˆØ	�Š�‰ŒˆåÑ!Ô!ˆØ×Ò Ñ"Ô"Ð"Ð"Ð"r   c                ót   — t          j        d¦  «        }t          ¦   «         }|                     |¦  «         d S )Nz theoryExercises/checker_demo.xml)r	   r    r0   rµ   )rj   r¤   rå  s      r   ÚtestCompositeLyricszTest.testCompositeLyrics
  s7   € ÝŒLÐ;Ñ<Ô<ˆÝÑ!Ô!ˆà×Ò Ñ"Ô"Ð"Ð"Ð"r   c                ó¦  — t          j        ¦   «         }d|j        _        t	          ¦   «                              |¦  «        }|                      |                     ¦   «         d¦  «         t          j        ¦   «         }d|j        _        t	          ¦   «                              |¦  «        }|                      |                     ¦   «         d¦  «         d S )Nz#FF0000zL\override NoteHead.color = "#FF0000"
\override Stem.color = "#FF0000"
c' 4  Ú	darkgreenzP\override NoteHead.color = "darkgreen"
\override Stem.color = "darkgreen"
c' 4  )r   rt  r¦  r§  r0   r’  rí  ÚstringOutput)rj   Úred_noteÚsmÚdark_green_notes       r   Ú
testColorszTest.testColors
  s¿   € å”9‘;”;ˆØ(ˆŒÔÝÑ Ô ×<Ò<¸XÑFÔFˆØ×ÒØ�OŠOÑÔðñ	
ô 	
ð 	
õ œ)™+œ+ˆØ&1ˆÔÔ#ÝÑ Ô ×<Ò<¸_ÑMÔMˆØ×ÒØ�OŠOÑÔðñ	
ô 	
ð 	
ð 	
ð 	
r   N)r   r   r   ræ  rð  rò  rù  r   r   r   râ  râ  ð	  sS   € € € € € Øð7ð 7ð 7ð#ð #ð #ð$#ð #ð #ð
ð 
ð 
ð 
ð 
r   râ  c                  ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestExternalTc                ój   — t          j        d¦  «        }| j        r|                     d¦  «         d S d S )NÚC5úlily.png)r   rt  Úshow)rj   ra  s     r   ÚxtestConvertNotezTestExternal.xtestConvertNote*
  s;   € ÝŒI�d‰OŒOˆØŒ9ð 	Ø�FŠF�:ÑÔÐÐÐð	ð 	r   c                ó²   — t          d¦  «        }|                     ¦   «         D ]	}d |_        Œ
| j        r"|j        d                              d¦  «         d S d S )Nrä  r   zlily.svg)r"   ÚflattenrX  rÿ  rÝ   )rj   rÃ  ra  s      r   ÚxtestConvertChoralez TestExternal.xtestConvertChorale/
  sa   € Ý  Ñ0Ô0ˆØ—’‘”ð 	ð 	ˆAØˆAŒGˆGØŒ9ð 	(ØŒG�AŒJ�OŠO˜JÑ'Ô'Ð'Ð'Ð'ð	(ð 	(r   c                ój   — t          j        d¦  «        }| j        r|                     d¦  «         d S d S )NzmiscFolk/americanfifeopus.abcrþ  )r	   r    rÿ  )rj   ÚfifeOpuss     r   ÚxtestSlowConvertOpusz!TestExternal.xtestSlowConvertOpus6
  s>   € Ý”<Ð ?Ñ@Ô@ˆØŒ9ð 	&Ø�MŠM˜*Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&r   c                óÎ  — ddl m} t          j        d¦  «        }d|j        _        t          j        ¦   «         }|                     | 	                    d¦  «        ¦  «         |                     |¦  «         t          j
        ¦   «         }|                     |¦  «         t          j        ¦   «         }|                     |¦  «         | j        r|                     d¦  «         d S d S )Nr   rè  rý  g       @z8/4rþ  )rì  ré  r   rt  r
   r  r   r©   r—   ry  r­   r®   rÿ  )rj   ré  ra  r  r  r¤   s         r   Ú
xtestBrevezTestExternal.xtestBreve;
  sÇ   € Ø!Ð!Ð!Ð!Ð!Ð!ÝŒI�d‰OŒOˆØ#&ˆŒ
Ô ÝŒNÑÔˆØ	�Š�×$Ò$ UÑ+Ô+Ñ,Ô,Ð,Ø	�Š�‰ŒˆÝŒK‰MŒMˆØ	�Š�‰ŒˆÝŒL‰NŒNˆØ	�Š�‰ŒˆØŒ9ð 	Ø�FŠF�:ÑÔÐÐÐð	ð 	r   c                óÌ  — t          j        ¦   «         }t          j        ¦   «         }|                     t	          j        dd¬¦  «        ¦  «         d|_        |                     d|¦  «         t          j        ¦   «         }|                     t	          j        dd¬¦  «        ¦  «         d|_        |                     d|¦  «         | j        r|                     d¦  «         d S d S )NÚB4Úwhole)rø   r€   r   é   rþ  )	r   r®   r­   r—   r   rt  rT  r´   rÿ  )rj   r¤   r  Úp2s       r   ÚtestStaffLineszTestExternal.testStaffLinesI
  sÁ   € ÝŒL‰NŒNˆÝŒK‰MŒMˆØ	�Š•”˜4 gÐ.Ñ.Ô.Ñ/Ô/Ð/ØˆŒØ	�Š��A‰ŒˆÝŒ[‰]Œ]ˆØ
�	Š	•$”)˜D wÐ/Ñ/Ô/Ñ0Ô0Ð0ØˆŒØ	�Š��B‰ŒˆØŒ9ð 	Ø�FŠF�:ÑÔÐÐÐð	ð 	r   N)	r   r   r   rÿ  r   r  r  r  r  r   r   r   rû  rû  '
  sd   € € € € € Ø€Dðð ð ð
(ð (ð (ð&ð &ð &ð
ð ð ðð ð ð ð r   rû  Ú__main__)-Ú__doc__Ú
__future__r   Úcollectionsr   Úimportlib.utilr   rt   r¢  r    r‚   rÀ  Úunittestrì  r   r   Úmusic21.converter.subConvertersr   r	   r
   r   r   r   r   r   r   Úmusic21.lilyr   rZ   ÚEnvironmentrq   rÊ  ÚModuleNotFoundErrorr   r   r"   r.   r0   ÚMusic21ExceptionrŠ   ÚTestCaserâ  rû  r   ÚmainTestr   r   r   ú<module>r     s  ððð ð
 #Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +à&ˆ{Ô&Ð'7Ñ8Ô8€ðØ€y�ÑÔð  ) )¨NÑ";Ô";ð ØˆˆàˆøøØð ð ð Ø€E€E€Eðøøøð ð/ð /ð /ð /ð /ñ /ô /ð /ð ,Ð+Ñ-Ô-Ð ð2ð 2ð 2ðð ð ð*N&:ð N&:ð N&:ð N&:ð N&:ñ N&:ô N&:ð N&:ðbL	ð 	ð 	ð 	ð 	˜\Ô:ñ 	ô 	ð 	ð5
ð 5
ð 5
ð 5
ð 5
ˆ8Ôñ 5
ô 5
ð 5
ðn-ð -ð -ð -ð -�8Ô$ñ -ô -ð -ðb ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðs   ÂB" Â"B,Â+B,