
    3j                    b   d dl mZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ g dZ	 edej                  fd	ej                  fd
ej                  fdej                  fdej                  fdej                  fdej                   fdej"                  fdej$                  fdej&                  fdej(                  fdej*                  fdej,                  fdej.                  fdej0                  fdej2                  fg      Z eej7                         D  cg c]	  \  } }|| f c}}       Zeej2                  = eej                  = eej                  = d
eej                  <   deej                  <    edej:                  fdej<                  fdej>                  fdej@                  fdejB                  fdejD                  fdejF                  fdejH                  fd ejJ                  fd!ejL                  fd"ejN                  fd#ejP                  fd$ejR                  fd%ejT                  fd&ejV                  fd'ejX                  fd(ejZ                  fd)ej\                  fd*ej^                  fd+ej`                  fg      Z1 ee1j7                         D  cg c]	  \  } }|| f c}}       Z2e2ej`                  = de2ejf                  <   ejh                  ejj                  ejj                  ejl                  ejl                  ejn                  ejp                  ejr                  ejt                  ejv                  d,
Z< G d- d.ejz                        Z> G d/ d0e>      Z? G d1 d2e>      Z@ G d3 d4eA      ZBd5ZCd6 ZDd7 ZEd8 ZF ej                  d9      ZHd: ZIeJd;k(  rd dlZ ej                          yyc c}} w c c}} w )<    )annotations)OrderedDictN)articulations)exceptions21)expressions)pppppppppppppppppppppfffffffffffffffffffffmpmfsfsfpsfppfprfrfzsfzsffzfznpfsfzpzother-dynamicsaccentzstrong-accentstaccatostaccatissimospiccatotenutozdetached-legatoscoopplopdoitfalloffzbreath-markcaesurastressunstresszother-articulationzup-bowzdown-bowharmoniczopen-stringzthumb-position	fingeringpluckzdouble-tongueztriple-tonguestoppedzsnap-pizzicatostringbendtapfretheeltoefingernailshandbellzother-technical)
z
trill-markturnzdelayed-turnzinverted-turnzdelayed-inverted-turnshakemordentzinverted-mordent	schleiferzother-ornamentc                  *     e Zd Zd fdZ fdZ xZS )MusicXMLExceptionc                @    t         |   |       d| _        d| _        y )N )super__init__measureNumberpartName)selfmessage	__class__s     H/DATA/.local/lib/python3.12/site-packages/music21/musicxml/xmlObjects.pyrC   zMusicXMLException.__init__l   s    !"$    c                    t         |          }| j                  s| j                  r d| j                   d| j                   d|z   }|S )Nz	In part (z), measure (z): )rB   __str__rD   rE   )rF   msgrH   s     rI   rL   zMusicXMLException.__str__q   sH    godmm_L9K9K8LCPSVVC
rJ   )rG   str)__name__
__module____qualname__rC   rL   __classcell__)rH   s   @rI   r?   r?   k   s     
 rJ   r?   c                      e Zd Zy)MusicXMLExportExceptionNrO   rP   rQ    rJ   rI   rT   rT   x       rJ   rT   c                      e Zd Zy)MusicXMLImportExceptionNrU   rV   rJ   rI   rY   rY   |   rW   rJ   rY   c                      e Zd Zy)MusicXMLWarningNrU   rV   rJ   rI   r[   r[      rW   rJ   r[   )hideObjectOnPrintc                    | dv ryy)N)yesTTFrV   values    rI   yesNoToBooleanra      s    rJ   c                
    | ryy)a  
    Convert a True, False bool to 'yes' or 'no'

    >>> musicxml.xmlObjects.booleanToYesNo(True)
    'yes'
    >>> musicxml.xmlObjects.booleanToYesNo(False)
    'no'

    anything that evaluates to True becomes 'yes'

    >>> musicxml.xmlObjects.booleanToYesNo(5)
    'yes'

    r^   norV   r_   s    rI   booleanToYesNord      s     rJ   c                0    t        t        | dz              S )z
    Turns a fraction into a string percent

    >>> musicxml.xmlObjects.fractionToPercent(0.25)
    '25'

    Only does whole numbers for now:

    >>> musicxml.xmlObjects.fractionToPercent(0.251)
    '25'

    d   )rN   intr_   s    rI   fractionToPercentrh      s     s53;  rJ   z^[a-zA-Z_][\w.-]*$c                X    t        | t              sy| syt        j                  |       ryy)a  
    Returns True or False if text is a valid xsd:id, that is, an NCName

    From http://www.datypic.com/sc/xsd/t-xsd_NCName.html:

        The type xsd:NCName represents an XML non-colonized name,
        which is simply a name that does not contain colons. An xsd:NCName value must
        start with either a letter or underscore (_) and may contain only letters,
        digits, underscores (_), hyphens (-), and periods (.). This is equivalent
        to the Name type, except that colons are not permitted.

    >>> musicxml.xmlObjects.isValidXSDID('hel_lo')
    True

    Names cannot begin with digits:

    >>> musicxml.xmlObjects.isValidXSDID('4sad')
    False

    Names must be strings:

    >>> musicxml.xmlObjects.isValidXSDID(12345)
    False

    FT)
isinstancerN   _NCNAMEmatch)texts    rI   isValidXSDIDrn      s)    4 dC }}TrJ   __main__)L
__future__r   collectionsr   remusic21r   r   r   DYNAMIC_MARKSAccentStrongAccentStaccatoStaccatissimoSpiccatoTenutoDetachedLegatoScoopPlopDoitFalloff
BreathMarkCaesuraStressUnstressArticulationARTICULATION_MARKSitemsARTICULATION_MARKS_REVUpBowDownBowStringHarmonic
OpenStringStringThumbPosition	FingeringFrettedPluckDoubleTongueTripleTongueStoppedSnapPizzicatoStringIndicationFretBendFretTapFretIndication	OrganHeelOrganToeHarpFingerNailsHandbellIndicationTechnicalIndicationTECHNICAL_MARKSTECHNICAL_MARKS_REVHarmonicTrillTurnInvertedTurnShakeMordentInvertedMordent	SchleiferOrnamentORNAMENT_MARKSMusic21Exceptionr?   rT   rY   UserWarningr[   STYLE_ATTRIBUTES_YES_NO_TO_BOOLra   rd   rh   compilerk   rn   rO   mainTest)kvs   00rI   <module>r      s   # # 	 "    !$$%}112-(()}223-(()$$%556}""#m  !m  !&&']--.&&'$$%-(()M667 , %9K9Q9Q9S%T9SAq!f9S%TU =556=112=//01; }-- ./7 }++ ,-*=*=> *M,A,AB *M,H,HI -}/G/GH 0-2S2ST +]-D-DE ')C)CD /1K1KL /1K1KL )=+@+@A 0-2M2MN (-*H*HI
 !'(>(>? %}'<'<= &(D(DE &(?(?@ %}'='=> -}/L/LM !+M,L,LM 1=3T3TU3! "6 "o6K6K6M"N6MdaAq66M"NO 99:.8 M** + !, 1 1%**"-"2"2#.#;#;+6+C+C&,,(00&1&A&A*44$/$8$8 
55 
	/ 		/ 		k 	 #: *!  "***
+#N zG [ &UD #Os   N%
N+
