
    rhL                       S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SS	KJr  SS
KJr  SSKJr  \R                  " S5      r " S S\R"                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S \\5      r " S! S"\5      r " S# S$\5      r " S% S&\5      r " S' S(\5      r " S) S*\5      r  " S+ S,\5      r! " S- S.\5      r" " S/ S0\5      r# " S1 S2\5      r$ " S3 S4\\5      r% " S5 S6\5      r& " S7 S8\5      r' " S9 S:\'5      r( " S; S<\'5      r) " S= S>\'5      r* " S? S@\)5      r+ " SA SB\)5      r, " SC SD\)\(5      r- " SE SF\)5      r. " SG SH\)5      r/ " SI SJ\)5      r0 " SK SL\/\*5      r1 " SM SN\)5      r2 " SO SP\25      r3 " SQ SR\25      r4 " SS ST\'5      r5 " SU SV\5\*5      r6 " SW SX\Rn                  \'5      r8 " SY SZ\Rn                  \'5      r9 " S[ S\\55      r: " S] S^\55      r; " S_ S`\'5      r< " Sa Sb\<5      r= " Sc Sd\<5      r> " Se Sf\<5      r? " Sg Sh\?5      r@ " Si Sj\?5      rA " Sk Sl\<5      rB " Sm Sn\'5      rC " So Sp\C5      rD " Sq Sr\C5      rE " Ss St\'5      rF " Su Sv\F5      rG " Sw Sx\'5      rH " Sy Sz\R                  5      rJ\/rK\LS{:X  a  SSKr\R                  " \J5        gg)|a  
Classes for representing and processing articulations.
Specific articulations are modeled as :class:`~music21.articulations.Articulation` subclasses.

A :class:`~music21.note.Note` object has an :attr:`~music21.note.Note.articulations` attribute.
This list can be used to store one or more :class:`music21.articulations.Articulation` subclasses.

As much as possible, MusicXML names are used for Articulation classes,
with xxx-yyy changed to XxxYyy.  For instance, "strong-accent" in
MusicXML is "StrongAccent" here.

Fingering and other playing marks are found here.  Fermatas, trills, etc.
are found in music21.expressions.

>>> n1 = note.Note('D#4')
>>> n1.articulations.append(articulations.Tenuto())
>>> #_DOCS_SHOW n1.show()

>>> c1 = chord.Chord(['C3', 'G4', 'E-5'])
>>> c1.articulations = [articulations.OrganHeel(), articulations.Accent()]
>>> #_DOCS_SHOW c1.show()

A longer test showing the utility of the module:

>>> s = stream.Stream()
>>> n1 = note.Note('c#5')
>>> n1.articulations = [articulations.Accent()]
>>> n1.quarterLength = 1.25
>>> s.append(n1)

>>> n2 = note.Note('d5')
>>> n2.articulations = [articulations.StrongAccent()]
>>> n2.quarterLength = 0.75
>>> s.append(n2)

>>> n3 = note.Note('b4')
>>> n3.articulations = [articulations.Staccato()]
>>> n3.quarterLength = 1.25
>>> n3.tie = tie.Tie('start')
>>> s.append(n3)

>>> n4 = note.Note('b4')
>>> n4.articulations = [articulations.Staccatissimo()]
>>> n4.quarterLength = 0.75
>>> s.append(n4)

>>> n5 = note.Note('a4')
>>> n5.articulations = [articulations.Tenuto()]
>>> n5.quarterLength = 4/3
>>> s.append(n5)

>>> n6 = note.Note('b-4')
>>> n6.articulations = [articulations.Staccatissimo(), articulations.Tenuto()]
>>> n6.quarterLength = 2/3
>>> s.append(n6)

>>> s.metadata = metadata.Metadata()
>>> s.metadata.title = 'Prova articolazioni'  # ital: 'Articulation Test'
>>> s.metadata.composer = 'Giuliano Lancioni'

>>> #_DOCS_SHOW s.show()

.. image:: images/prova_articolazioni.*
    :width: 628
    )annotationsN)base)common)tempAttribute)OffsetQL)environment)interval)spanner)stylearticulationsc                     ^  \ rS rSr% Sr\R                  rS\S'   SU 4S jjr	S r
\SS j5       rS rS	 r\" \\S
S9rSrU =r$ )Articulation`   a  
Base class for all Articulation sub-classes.

>>> x = articulations.Articulation()
>>> x.placement = 'below'
>>> x.style.absoluteY = 20
>>> x.displayText = '>'

**Equality**

Equality of articulations is based only on the class, as other attributes are independent
of context and deployment.

>>> at1 = articulations.StrongAccent()
>>> at2 = articulations.StrongAccent()
>>> at1.placement = 'above'
>>> at2.placement = 'below'
>>> at1 == at2
True

Comparison between classes and with the object itself behaves as expected:

>>> at3 = articulations.Accent()
>>> at4 = articulations.Staccatissimo()
>>> at1 == at3
False
>>> at4 == at4
True

OMIT_FROM_DOCS

>>> at5 = articulations.Staccato()
>>> at6 = articulations.Spiccato()
>>> [at1, at4, at3] == [at1, at4, at3]
True
>>> [at1, at2, at3] == [at2, at3, at1]
False
>>> {at1, at2, at3} == {at2, at3, at1}
True
>>> at6 == True
False

This is in OMIT
ztype[style.Style]_styleClassc                l   > [         TU ]  " S0 UD6  S U l        SU l        SU l        SU l        S U l        g )Ng        g      ?first )super__init__	placement_volumeShiftlengthShift	tieAttachdisplayTextselfkeywords	__class__s     O/home/james-whalen/.local/lib/python3.13/site-packages/music21/articulations.pyr   Articulation.__init__   s9    $8$#&"%%%)    c                    g)N r   r   s    r   _reprInternalArticulation._reprInternal   s    r!   c                X    U R                   R                  n[        R                  " USS9$ )a  
returns the name of the articulation, which is generally the
class name without the leading letter lowercase.

Subclasses can override this as necessary.

>>> st = articulations.Staccato()
>>> st.name
'staccato'

>>> sp = articulations.SnapPizzicato()
>>> sp.name
'snap pizzicato'
 )replacement)r   __name__r   camelCaseToHyphen)r   	classNames     r   nameArticulation.name   s&      NN++	''	sCCr!   c                    U R                   $ Nr   r$   s    r   _getVolumeShiftArticulation._getVolumeShift   s       r!   c                2    US:  a  SnOUS:  a  SnXl         g )N   r1   )r   values     r   _setVolumeShiftArticulation._setVolumeShift   s     19ERZE!r!   a  
        Get or set the volumeShift of this Articulation. This value, between -1 and 1,
        that is used to shift the final Volume of the object it is attached to.


        >>> at1 = articulations.StrongAccent()
        >>> at1.volumeShift > 0.1
        True
        )doc)r   r   r   r   r   )returnNone)r;   str)r*   
__module____qualname____firstlineno____doc__r   	TextStyler   __annotations__r   r%   propertyr-   r2   r8   volumeShift__static_attributes____classcell__r   s   @r   r   r   `   sZ    +X &+__K"4* D D$!" ?O B Kr!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )LengthArticulation   zD
Superclass for all articulations that change the length of a note.
c                4   > [         TU ]  " S0 UD6  SU l        g Nlastr   r   r   r   r   s     r   r   LengthArticulation.__init__       $8$r!   r   r*   r>   r?   r@   rA   r   rF   rG   rH   s   @r   rJ   rJ      s       r!   rJ   c                      \ rS rSrSrSrg)DynamicArticulation   zE
Superclass for all articulations that change the dynamic of a note.
r   Nr*   r>   r?   r@   rA   rF   r   r!   r   rU   rU          r!   rU   c                      \ rS rSrSrSrg)PitchArticulation   zC
Superclass for all articulations that change the pitch of a note.
r   NrW   r   r!   r   rZ   rZ      rX   r!   rZ   c                      \ rS rSrSrSrg)TimbreArticulation   zD
Superclass for all articulations that change the timbre of a note.
r   NrW   r   r!   r   r]   r]      rX   r!   r]   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Accent   z!

>>> a = articulations.Accent()
c                4   > [         TU ]  " S0 UD6  SU l        g )Ng?r   r   r   r   r   s     r   r   Accent.__init__   s    $8$r!   r1   rS   rH   s   @r   r`   r`      s       r!   r`   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )StrongAccent   z
Like an accent but even stronger.  Has an extra
attribute of pointDirection

>>> a = articulations.StrongAccent()
>>> a.pointDirection
'up'
>>> a.pointDirection = 'down'
>>> a.pointDirection
'down'
c                B   > [         TU ]  " S0 UD6  SU l        SU l        g )Ng333333?upr   )r   r   r   pointDirectionr   s     r   r   StrongAccent.__init__   s#    $8$ "r!   )r   rj   rS   rH   s   @r   rf   rf      s    
# #r!   rf   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Staccato   z#

>>> a = articulations.Staccato()
c                B   > [         TU ]  " S0 UD6  SU l        SU l        g )N皙?ffffff?r   r   r   r   r   r   s     r   r   Staccato.__init__   #    $8$ r!   r   r   rS   rH   s   @r   rm   rm      s     r!   rm   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Staccatissimoi  zs
A very short note (derived from staccato), usually
represented as a wedge.

>>> a = articulations.Staccatissimo()
c                B   > [         TU ]  " S0 UD6  SU l        SU l        g )Nrp   g      ?r   rr   r   s     r   r   Staccatissimo.__init__	  rt   r!   ru   rS   rH   s   @r   rw   rw     s     r!   rw   c                      \ rS rSrSrS rSrg)Spiccatoi  a   
A staccato note + accent in one

>>> spiccato = articulations.Spiccato()
>>> staccato = articulations.Staccato()
>>> accent = articulations.Accent()
>>> spiccato.lengthShift == staccato.lengthShift
True
>>> spiccato.volumeShift == accent.volumeShift
True
c                    [         R                  U 5        [        U S5         [        R                  U 5        S S S 5        g ! , (       d  f       g = f)Nr   )rm   r   r   r`   )r   r   s     r   r   Spiccato.__init__  s2    $4/OOD! 0//s   A
Ar   N)r*   r>   r?   r@   rA   r   rF   r   r!   r   r{   r{     s    
"r!   r{   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Tenutoi   z 
>>> a = articulations.Tenuto()
c                B   > [         TU ]  " S0 UD6  SU l        SU l        g )N皙皙?r   rr   r   s     r   r   Tenuto.__init__$  s#    $8$!r!   ru   rS   rH   s   @r   r   r      s     r!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )DetachedLegatoi)  z(
>>> a = articulations.DetachedLegato()
c                4   > [         TU ]  " S0 UD6  SU l        g )Ng?r   )r   r   r   r   s     r   r   DetachedLegato.__init__-  s    $8$r!   )r   rS   rH   s   @r   r   r   )  s     r!   r   c                  0    \ rS rSrSr\R                  rSrg)IndeterminateSlidei3  z
Represents a whole class of slides that are
of an indeterminate pitch amount (scoops, plops, etc.)

All these have style information of .style.lineShape
.style.lineType, .style.dashLength, and .style.spaceLength
r   N)	r*   r>   r?   r@   rA   r   	LineStyler   rF   r   r!   r   r   r   3  s     //Kr!   r   c                      \ rS rSrSrSrg)Scoopi>  z_
An indeterminateSlide coming before the main note and going up

>>> a = articulations.Scoop()
r   NrW   r   r!   r   r   r   >      r!   r   c                      \ rS rSrSrSrg)PlopiF  za
An indeterminateSlide coming before the main note and going down.

>>> a = articulations.Plop()
r   NrW   r   r!   r   r   r   F  r   r!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )DoitiM  z^
An indeterminateSlide coming after the main note and going up.

>>> a = articulations.Doit()
c                4   > [         TU ]  " S0 UD6  SU l        g rM   rO   r   s     r   r   Doit.__init__S  rQ   r!   rR   rS   rH   s   @r   r   r   M      
   r!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )FalloffiW  zc
An indeterminateSlide coming after the main note and going down.

>>> a = articulations.Falloff()
c                4   > [         TU ]  " S0 UD6  SU l        g rM   rO   r   s     r   r   Falloff.__init__]  rQ   r!   rR   rS   rH   s   @r   r   r   W  r   r!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )
BreathMarkid  zk
Can have as a symbol 'comma' or 'tick' or None

>>> a = articulations.BreathMark()
>>> a.symbol = 'comma'
c                B   > [         TU ]  " S0 UD6  SU l        S U l        g )Nrq   r   )r   r   r   symbolr   s     r   r   BreathMark.__init__k  s"    $8$r!   )r   r   rS   rH   s   @r   r   r   d  s     r!   r   c                      \ rS rSrSrSrg)Caesuraip  z!
>>> a = articulations.Caesura()
r   NrW   r   r!   r   r   r   p  rX   r!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Stressiu  zh
An articulation indicating stress.  Played a little longer and louder.

>>> a = articulations.Stress()
c                B   > [         TU ]  " S0 UD6  SU l        SU l        g )Nrp   r   r   rr   r   s     r   r   Stress.__init__{  rt   r!   ru   rS   rH   s   @r   r   r   u  s    
 r!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )Unstressi  zh
An articulation indicating lack of stress.  Played a little quieter.

>>> a = articulations.Unstress()
c                4   > [         TU ]  " S0 UD6  SU l        g )Nr   r   rc   r   s     r   r   Unstress.__init__      $8$!r!   r1   rS   rH   s   @r   r   r     s    
" "r!   r   c                      \ rS rSrSrSrg)TechnicalIndicationi  z
TechnicalIndications (MusicXML: technical) give performance
indications specific to different instrument types, such
as harmonics or bowing.

TechnicalIndications can include an optional content.
r   NrW   r   r!   r   r   r     s    r!   r   c                      \ rS rSrSrSrg)Harmonici  zK
A general harmonic indicator -- StringHarmonic is probably what you want.
r   NrW   r   r!   r   r   r     rX   r!   r   c                      \ rS rSrSrSrg)Bowingi  zK
Indication that bowing is being affected.

>>> a = articulations.Bowing()
r   NrW   r   r!   r   r   r     r   r!   r   c                  6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )	Fingeringi  a  
Fingering is a technical indication that covers the fingering of
a note (in a guitar/fret context, this covers the fret finger,
see FrettedPluck for that).

Converts the MusicXML -- <fingering> object

>>> f = articulations.Fingering(5)
>>> f
<music21.articulations.Fingering 5>
>>> f.fingerNumber
5

`.substitution` indicates that this fingering indicates a substitute fingering:

>>> f.substitution = True

MusicXML distinguishes between a substitution and an alternate
fingering:

>>> f.alternate = True

Fingerings are the only articulations that apply per note in a chord.
Other articulations, e.g., accents, apply to the whole chord and will,
therefore, only be associated with the first note of a chord when serializing.
Since chords store all articulations in an ordered list, Fingerings
are mapped implicitly to the notes of a chord in order. Superfluous
Fingerings will be ignored and may be discarded when serializing.
c                N   > [         TU ]  " S0 UD6  Xl        SU l        SU l        g NFr   )r   r   fingerNumbersubstitution	alternate)r   r   r   r   s      r   r   Fingering.__init__  s(    $8$(!r!   c                ,    [        U R                  5      $ r0   )r=   r   r$   s    r   r%   Fingering._reprInternal  s    4$$%%r!   )r   r   r   r0   	r*   r>   r?   r@   rA   r   r%   rF   rG   rH   s   @r   r   r     s    :& &r!   r   c                      \ rS rSrSrSrg)UpBowi  z
>>> a = articulations.UpBow()
r   NrW   r   r!   r   r   r     rX   r!   r   c                      \ rS rSrSrSrg)DownBowi  z!
>>> a = articulations.DownBow()
r   NrW   r   r!   r   r   r     rX   r!   r   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )StringHarmonici  aA  
Indicates that a note is a harmonic, and can also specify
whether it is the base pitch, the sounding pitch, or the touching pitch.

>>> h = articulations.StringHarmonic()
>>> h.harmonicType
'natural'
>>> h.harmonicType = 'artificial'

pitchType can be 'base', 'sounding', or 'touching' or None

>>> h.pitchType = 'base'
c                B   > [         TU ]  " S0 UD6  SU l        S U l        g )Nnaturalr   )r   r   harmonicType	pitchTyper   s     r   r   StringHarmonic.__init__  s"    $8$%r!   )r   r   rS   rH   s   @r   r   r     s     r!   r   c                      \ rS rSrSrg)
OpenStringi  r   Nr*   r>   r?   r@   rF   r   r!   r   r   r         r!   r   c                  6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )StringIndicationi  a  
StringIndication indicates which string a note is played on.

A StringIndication can be constructed as

>>> si = articulations.StringIndication(2)
>>> si
<music21.articulations.StringIndication 2>
>>> si.number
2

If no argument to the constructor is specified, number defaults to 0.
c                2   > [         TU ]  " S0 UD6  Xl        g Nr   r   r   numberr   r   r   r   s      r   r   StringIndication.__init__      $8$r!   c                    U R                    $ r0   r   r$   s    r   r%   StringIndication._reprInternal      ++r!   r   r   r   rH   s   @r   r   r            r!   r   c                      \ rS rSrSrSrg)StringThumbPositioni   z
MusicXML -- thumb-position
r   NrW   r   r!   r   r   r           	r!   r   c                      \ rS rSrSrSrg)StringFingeringi  zG
Indicates a fingering on a specific string.  Nothing special for now.
r   NrW   r   r!   r   r   r     r   r!   r   c                      \ rS rSrSrSrg)	Pizzicatoi  z
in MusicXML, Pizzicato is an element of every note.
Here we represent pizzicatos along with all bowing marks.

For pluck, see FrettedPluck.
r   NrW   r   r!   r   r   r     s     	r!   r   c                      \ rS rSrSrg)SnapPizzicatoi  r   Nr   r   r!   r   r   r     r   r!   r   c                      \ rS rSrSrSrg)NailPizzicatoi  z
Does not exist in MusicXML
r   NrW   r   r!   r   r   r     r   r!   r   c                  6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )FretIndicationi  a  
FretIndication indicates which fret of a string a note is played on.

A FretIndication can be constructed as

>>> fi = articulations.FretIndication(3)
>>> fi
<music21.articulations.FretIndication 3>
>>> fi.number
3

If no argument to the constructor is specified, number defaults to 0.
c                2   > [         TU ]  " S0 UD6  Xl        g r   r   r   s      r   r   FretIndication.__init__,  r   r!   c                    U R                    $ r0   r   r$   s    r   r%   FretIndication._reprInternal0  r   r!   r   r   r   rH   s   @r   r   r     r   r!   r   c                      \ rS rSrSrSrg)FrettedPlucki3  zI
specifies plucking fingering for fretted instruments

pluck in musicxml
r   NrW   r   r!   r   r   r   3  s    
 	r!   r   c                      \ rS rSrSrSrg)HammerOni;  z9
A hammer-on represented as a spanner between two Notes.
r   NrW   r   r!   r   r   r   ;  r   r!   r   c                      \ rS rSrSrSrg)PullOffiA  z8
A pull-off represented as a spanner between two Notes.
r   NrW   r   r!   r   r   r   A  r   r!   r   c                     ^  \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'    SSSSSS.         SU 4S jjjjrSrU =r$ )FretBendiG  a&  
Bend indication for fretted instruments

Bend in musicxml

`number` is an identifier for the articulation. Defaults to 0.

`bendAlter` is the interval defined by the bend,
bend-alter in musicxml. Defaults to `None`.

`preBend` indicates if the string is bent before
the onset of the note. Defaults to `False`.

`release` is the quarterLength value from the start
of the note for releasing the bend, if any. Defaults to `None`.

`withBar` indicates what whammy bar movement is used, if any.
MusicXML supports 'scoop' or 'dip'. Defaults to `None`.

>>> fb = articulations.FretBend(1, bendAlter=interval.ChromaticInterval(-2),  release=0.5)
>>> fb
<music21.articulations.FretBend 1>
>>> fb.preBend
False
>>> fb.withBar is None
True
>>> fb.bendAlter
<music21.interval.ChromaticInterval -2>
>>> fb.release
0.5
5interval.Interval | interval.ChromaticInterval | None	bendAlterboolpreBendOffsetQL | Nonerelease
str | NonewithBarNF)r   r   r   r   c               Z   > [         TU ]  " SSU0UD6  X l        X0l        X@l        XPl        g )Nr   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   s          r   r   FretBend.__init__l  s.     	33(3"r!   r   )
r   intr   r   r   r   r   r   r   r   )	r*   r>   r?   r@   rA   rC   r   rF   rG   rH   s   @r   r   r   G  sw    > EDM  LP#'" I	
  !  r!   r   c                      \ rS rSrSrg)FretTapi|  r   Nr   r   r!   r   r   r   |  r   r!   r   c                      \ rS rSrSrg)WindIndicationi  r   Nr   r   r!   r   r   r     r   r!   r   c                      \ rS rSrSrg)WoodwindIndicationi  r   Nr   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrg)BrassIndicationi  r   Nr   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrg)TonguingIndicationi  r   Nr   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrg)DoubleTonguei  r   Nr   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrg)TripleTonguei  r   Nr   r   r!   r   r	  r	    r   r!   r	  c                      \ rS rSrSrg)Stoppedi  r   Nr   r   r!   r   r  r    r   r!   r  c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )OrganIndicationi  z
Indicates whether a pitch should be played with heel or toe.

Has one attribute, "substitution" default to False, which
indicates whether the mark is a substitution mark
c                4   > [         TU ]  " S0 UD6  SU l        g r   )r   r   r   r   s     r   r   OrganIndication.__init__  r   r!   )r   rS   rH   s   @r   r  r    s    " "r!   r  c                      \ rS rSrSrg)	OrganHeeli  r   Nr   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrg)OrganToei  r   Nr   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrg)HarpIndicationi  r   Nr   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrSrg)HarpFingerNailsi  z
musicXML -- fingernails
r   NrW   r   r!   r   r  r    r   r!   r  c                      \ rS rSrSrSrg)HandbellIndicationi  z
displayText is used to store any of the techniques in handbell music.

Values are damp, echo, gyro, hand martellato, mallet lift,
mallet table, martellato, martellato lift,
muted martellato, pluck lift, and swing
r   NrW   r   r!   r   r  r    s     	r!   r  c                       \ rS rSrS rS rSrg)Testi  c                2    SSK Jn  U" U [        5       5        g )Nr   )testCopyAll)music21.test.commonTestr  globals)r   r  s     r   testCopyAndDeepcopyTest.testCopyAndDeepcopy  s    7D')$r!   c                P    [        5       nU R                  UR                  S 5        g r0   )r   assertEqualr   )r   as     r   	testBasicTest.testBasic  s    Jd+r!   r   N)r*   r>   r?   r@   r   r%  rF   r   r!   r   r  r    s    %
,r!   r  __main__)NrA   
__future__r   unittestmusic21r   r   music21.common.classToolsr   music21.common.typesr   r   r	   r
   r   EnvironmentenvironLocalMusic21Objectr   rJ   rU   rZ   r]   r`   rf   rm   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Spannerr   r   r   r   r   r  r  r  r  r	  r  r  r  r  r  r  r  TestCaser  
_DOC_ORDERr*   mainTestr   r!   r   <module>r4     s;  @B #    3 )     &&7a4%% aH   , 
 
     #6 #"! 
H 
"x "$ ' "* "         
# 
l 
	 "4 	"" ", " 
  %&# %&RF 
f 
VX &	 	 v  ,	& 		&	 		 		I 		I 	 (  *	>9 		w 3 		goo2 	3~ 3j	n 		( 		 		n 		 		% 		% 		n 		") 	"	 		 		( 		n 		, 	,8 ,@ ^
zT r!   