.. _moduleSpanner:

music21.spanner
===============

.. WARNING: DO NOT EDIT THIS FILE: AUTOMATICALLY GENERATED. Edit the .py file directly

.. module:: music21.spanner


A spanner is a music21 object that represents a connection usually between
two or more music21 objects that might live in different streams but need
some sort of connection between them.  A slur is one type of spanner -- it might
connect notes in different Measure objects or even between different parts.


This package defines some of the most common spanners.  Other spanners
can be found in modules such as :ref:`moduleDynamics` (for things such as crescendos)
or in :ref:`moduleMeter` (a ritardando, for instance).




Spanner
-------

Inherits from: :class:`~music21.base.Music21Object`, :class:`~music21.base.JSONSerializer`

.. class:: Spanner(*arguments, **keywords)


    Spanner objects live on Streams in the same manner as other Music21Objects, but represent and store connections between one or more other Music21Objects.

    Commonly used Spanner subclasses include the :class:`~music21.spanner.Slur`, :class:`~music21.spanner.RepeatBracket`, :class:`~music21.spanner.Crescendo`, and :class:`~music21.spanner.Diminuendo`.

    In some cases you will want to subclass Spanner
    for specific purposes.

    In the first demo, we create
    a spanner to represent a written-out accelerando, such
    as Elliott Carter uses in his second string quartet (he marks them
    with an arrow).




    >>> from music21 import *
    >>> class CarterAccelerandoSign(spanner.Spanner):
    ...    pass
    >>> n1 = note.Note('C4')
    >>> n2 = note.Note('D4')
    >>> n3 = note.Note('E4')
    >>> sp1 = CarterAccelerandoSign(n1, n2, n3) # or as a list: [n1, n2, n3]
    >>> sp1.getComponents()
    [<music21.note.Note C>, <music21.note.Note D>, <music21.note.Note E>]


    Now we put the notes and the spanner into a Stream object.  Note that
    the convention is to put the spanner at the beginning:




    >>> s = stream.Stream()
    >>> s.append([n1, n2, n3])
    >>> s.insert(0, sp1)


    Now we can get at the spanner in one of three ways.

    (1) it is just a normal element in the stream:



    >>> for e in s:
    ...    print e
    <music21.note.Note C>
    <music21.spanner.CarterAccelerandoSign <music21.note.Note C><music21.note.Note D><music21.note.Note E>>
    <music21.note.Note D>
    <music21.note.Note E>


    (2) we can get a stream of spanners (equiv. to getElementsByClass('Spanner'))
        by calling the .spanner property on the stream.



    >>> spannerCollection = s.spanners # a stream object
    >>> for thisSpanner in spannerCollection:
    ...     print thisSpanner
    <music21.spanner.CarterAccelerandoSign <music21.note.Note C><music21.note.Note D><music21.note.Note E>>


    (3) we can get the spanner by looking at the list getSpannerSites() on any object.




    >>> n2.getSpannerSites()
    [<music21.spanner.CarterAccelerandoSign <music21.note.Note C><music21.note.Note D><music21.note.Note E>>]


    In this example we will slur a few notes and then iterate over the stream to
    see which are slurred:




    >>> n1 = note.Note('C4')
    >>> n2 = note.Note('D4')
    >>> n3 = note.Note('E4')
    >>> n4 = note.Note('F4')
    >>> n5 = note.Note('G4')
    >>> n6 = note.Note('A4')


    Create a slur over the second and third notes at instantiation:



    >>> slur1 = spanner.Slur([n2, n3])

    Slur the fifth and the sixth notes by adding them to an existing slur:



    >>> slur2 = spanner.Slur()
    >>> slur2.addComponents([n5, n6])

    Now add them all to a stream:



    >>> part1 = stream.Part()
    >>> part1.append([n1, n2, n3, n4, n5, n6])
    >>> part1.insert(0, slur1)
    >>> part1.insert(0, slur2)

    Say we wanted to know which notes in a piece started a
    slur, here's how we could do it:



    >>> for n in part1.notes:
    ...    ss = n.getSpannerSites()
    ...    for thisSpanner in ss:
    ...       if 'Slur' in thisSpanner.classes:
    ...            if thisSpanner.isFirst(n):
    ...                print n.nameWithOctave
    D4
    G4

    Alternatively, you could iterate over the spanners
    of part1 and get their first elements:



    >>> for thisSpanner in part1.spanners:
    ...     firstNote = thisSpanner.getComponents()[0]
    ...     print firstNote.nameWithOctave
    D4
    G4

    The second method is shorter, but the first is likely to
    be useful in cases where you are doing other things to
    each note object along the way.

    Oh, and of course, slurs do print properly in musicxml:




    >>> part1.show()




    .. image:: images/slur1_example.*
            :width: 400


    (the Carter example would not print an arrow since that
    element has no corresponding musicxml representation).





    **Spanner** **attributes**

        Attributes without Documentation: `isSpanner`, `idLocal`, `completeStatus`

        Attributes inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.classSortOrder`, :attr:`~music21.base.Music21Object.isStream`, :attr:`~music21.base.Music21Object.isVariant`, :attr:`~music21.base.Music21Object.hideObjectOnPrint`, :attr:`~music21.base.Music21Object.groups`, :attr:`~music21.base.Music21Object.id`

    **Spanner** **properties**

        Properties inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.activeSite`, :attr:`~music21.base.Music21Object.beat`, :attr:`~music21.base.Music21Object.beatDuration`, :attr:`~music21.base.Music21Object.beatStr`, :attr:`~music21.base.Music21Object.beatStrength`, :attr:`~music21.base.Music21Object.classes`, :attr:`~music21.base.Music21Object.derivationHierarchy`, :attr:`~music21.base.Music21Object.duration`, :attr:`~music21.base.Music21Object.isGrace`, :attr:`~music21.base.Music21Object.measureNumber`, :attr:`~music21.base.Music21Object.offset`, :attr:`~music21.base.Music21Object.priority`, :attr:`~music21.base.Music21Object.seconds`

        Properties inherited from :class:`~music21.base.JSONSerializer`: :attr:`~music21.base.JSONSerializer.json`

    **Spanner** **methods**

        .. method:: addComponents(components, *arguments, **keywords)

            Associate one or more components with this Spanner.

            The order that components is added is retained and may or may not be significant to the spanner.



            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> n3 = note.Note('e')
            >>> n4 = note.Note('c')
            >>> n5 = note.Note('d-')
            ⁠ 
            >>> sl = spanner.Spanner()
            >>> sl.addComponents(n1)
            >>> sl.addComponents(n2, n3)
            >>> sl.addComponents([n4, n5])
            >>> sl.getComponentIds() == [id(n) for n in [n1, n2, n3, n4, n5]]
            True




        .. method:: freezeIds()

            No documentation.


        .. method:: getComponentIds()

            Return all id() for all stored objects.



        .. method:: getComponents()

            Return all components for this Spanner as objects, without weak-refs.

            As this is a Music21Object, the name here is more specific to avoid name clashes.



            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> sl = spanner.Spanner()
            >>> sl.addComponents(n1)
            >>> sl.getComponents() == [n1]
            True
            >>> sl.addComponents(n2)
            >>> sl.getComponents() == [n1, n2]
            True
            >>> sl.getComponentIds() == [id(n1), id(n2)]
            True
            >>> c1 = clef.TrebleClef()
            >>> sl.addComponents(c1)
            >>> sl.getComponents() == [n1, n2, c1] # make sure that not sorting
            True



        .. method:: getComponentsByClass(classFilterList)




            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> c1 = clef.AltoClef()
            >>> sl = spanner.Spanner()
            >>> sl.addComponents([n1, n2, c1])
            >>> sl.getComponentsByClass('Note') == [n1, n2]
            True
            >>> sl.getComponentsByClass('Clef') == [c1]
            True



        .. method:: getDurationBySite(site)

            Return a Duration object representing the value between the first component's offset and the last components offset plus duration.



        .. method:: getDurationSpanBySite(site)

            Return the duration span, or the distnace between the first component's offset and the last components offset plus duration.



        .. method:: getFirst()

            Get the object of the first component



            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> n3 = note.Note('e')
            >>> n4 = note.Note('c')
            >>> n5 = note.Note('d-')
            ⁠ 
            >>> sl = spanner.Spanner()
            >>> sl.addComponents(n1, n2, n3, n4, n5)
            >>> sl.getFirst() is n1
            True



        .. method:: getLast()

            Get the object of the first component



            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> n3 = note.Note('e')
            >>> n4 = note.Note('c')
            >>> n5 = note.Note('d-')
            ⁠ 
            >>> sl = spanner.Spanner()
            >>> sl.addComponents(n1, n2, n3, n4, n5)
            >>> sl.getLast() is n5
            True




        .. method:: getOffsetSpanBySite(site)

            Return the span, or min and max values, of all offsets for a given site.



        .. method:: getOffsetsBySite(site)

            Given a site shared by all components, return a list of offset values.



            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> s = stream.Stream()
            >>> s.insert(3, n1)
            >>> s.insert(11, n2)
            >>> sp = spanner.Spanner(n1, n2)
            >>> sp.getOffsetsBySite(s)
            [3.0, 11.0]



        .. method:: getSpannerStorageId()

            Return the object id of the SpannerStorage object



        .. method:: hasComponent(component)

            Return True if this Spanner has the component.


        .. method:: isFirst(component)

            Given a component, is it first?



            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> n3 = note.Note('e')
            >>> n4 = note.Note('c')
            >>> n5 = note.Note('d-')
            ⁠ 
            >>> sl = spanner.Spanner()
            >>> sl.addComponents(n1, n2, n3, n4, n5)
            >>> sl.isFirst(n2)
            False
            >>> sl.isFirst(n1)
            True
            >>> sl.isLast(n1)
            False
            >>> sl.isLast(n5)
            True




        .. method:: isLast(component)

            Given a component, is it last?  Returns True or False



        .. method:: purgeLocations(rescanIsDead=False)

            No documentation.


        .. method:: purgeOrphans()

            No documentation.


        .. method:: replaceComponent(old, new)

            When copying a Spanner, we need to update the spanner with new references for copied components (if the Notes of a Slur have beenc copied, that Slur's Note references need references to the new Notes). Given the old component, this method will replace the old with the new.

            The `old` parameter can be either an object or object id.



            >>> from music21 import *
            >>> n1 = note.Note('g')
            >>> n2 = note.Note('f#')
            >>> c1 = clef.AltoClef()
            >>> c2 = clef.BassClef()
            >>> sl = spanner.Spanner(n1, n2, c1)
            >>> sl.replaceComponent(c1, c2)
            >>> sl[-1] == c2
            True



        .. method:: unfreezeIds()

            No documentation.


        .. method:: unwrapWeakref()

            Overridden method for unwrapping all Weakrefs.



        .. method:: wrapWeakref()

            Overridden method for unwrapping all Weakrefs.



        Methods inherited from :class:`~music21.base.Music21Object`: :meth:`~music21.base.Music21Object.searchActiveSiteByAttr`, :meth:`~music21.base.Music21Object.getContextAttr`, :meth:`~music21.base.Music21Object.setContextAttr`, :meth:`~music21.base.Music21Object.addContext`, :meth:`~music21.base.Music21Object.addLocation`, :meth:`~music21.base.Music21Object.addLocationAndActiveSite`, :meth:`~music21.base.Music21Object.getAllContextsByClass`, :meth:`~music21.base.Music21Object.getCommonSiteIds`, :meth:`~music21.base.Music21Object.getCommonSites`, :meth:`~music21.base.Music21Object.getContextByClass`, :meth:`~music21.base.Music21Object.getOffsetBySite`, :meth:`~music21.base.Music21Object.getSiteIds`, :meth:`~music21.base.Music21Object.getSites`, :meth:`~music21.base.Music21Object.getSpannerSites`, :meth:`~music21.base.Music21Object.hasContext`, :meth:`~music21.base.Music21Object.hasSite`, :meth:`~music21.base.Music21Object.hasSpannerSite`, :meth:`~music21.base.Music21Object.hasVariantSite`, :meth:`~music21.base.Music21Object.isClassOrSubclass`, :meth:`~music21.base.Music21Object.mergeAttributes`, :meth:`~music21.base.Music21Object.next`, :meth:`~music21.base.Music21Object.previous`, :meth:`~music21.base.Music21Object.purgeUndeclaredIds`, :meth:`~music21.base.Music21Object.removeLocationBySite`, :meth:`~music21.base.Music21Object.removeLocationBySiteId`, :meth:`~music21.base.Music21Object.setOffsetBySite`, :meth:`~music21.base.Music21Object.show`, :meth:`~music21.base.Music21Object.splitAtDurations`, :meth:`~music21.base.Music21Object.splitAtQuarterLength`, :meth:`~music21.base.Music21Object.splitByQuarterLengths`, :meth:`~music21.base.Music21Object.write`

        Methods inherited from :class:`~music21.base.JSONSerializer`: :meth:`~music21.base.JSONSerializer.jsonAttributes`, :meth:`~music21.base.JSONSerializer.jsonComponentFactory`, :meth:`~music21.base.JSONSerializer.jsonPrint`, :meth:`~music21.base.JSONSerializer.jsonRead`, :meth:`~music21.base.JSONSerializer.jsonWrite`


Glissando
---------

Inherits from: :class:`~music21.spanner.Spanner`, :class:`~music21.base.Music21Object`, :class:`~music21.base.JSONSerializer`

.. class:: Glissando(*arguments, **keywords)

    A between two Notes specifying a glissando or similar alteration. Different line types can be specified.



    **Glissando** **attributes**

        Attributes inherited from :class:`~music21.spanner.Spanner`: :attr:`~music21.spanner.Spanner.isSpanner`, :attr:`~music21.spanner.Spanner.idLocal`, :attr:`~music21.spanner.Spanner.completeStatus`

        Attributes inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.classSortOrder`, :attr:`~music21.base.Music21Object.isStream`, :attr:`~music21.base.Music21Object.isVariant`, :attr:`~music21.base.Music21Object.hideObjectOnPrint`, :attr:`~music21.base.Music21Object.groups`, :attr:`~music21.base.Music21Object.id`

    **Glissando** **properties**

        .. attribute:: label


            Get or set the label property.



        .. attribute:: lineType


            Get or set the lineType property.



        Properties inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.activeSite`, :attr:`~music21.base.Music21Object.beat`, :attr:`~music21.base.Music21Object.beatDuration`, :attr:`~music21.base.Music21Object.beatStr`, :attr:`~music21.base.Music21Object.beatStrength`, :attr:`~music21.base.Music21Object.classes`, :attr:`~music21.base.Music21Object.derivationHierarchy`, :attr:`~music21.base.Music21Object.duration`, :attr:`~music21.base.Music21Object.isGrace`, :attr:`~music21.base.Music21Object.measureNumber`, :attr:`~music21.base.Music21Object.offset`, :attr:`~music21.base.Music21Object.priority`, :attr:`~music21.base.Music21Object.seconds`

        Properties inherited from :class:`~music21.base.JSONSerializer`: :attr:`~music21.base.JSONSerializer.json`

    **Glissando** **methods**

        Methods inherited from :class:`~music21.spanner.Spanner`: :meth:`~music21.spanner.Spanner.addComponents`, :meth:`~music21.spanner.Spanner.freezeIds`, :meth:`~music21.spanner.Spanner.getComponentIds`, :meth:`~music21.spanner.Spanner.getComponents`, :meth:`~music21.spanner.Spanner.getComponentsByClass`, :meth:`~music21.spanner.Spanner.getDurationBySite`, :meth:`~music21.spanner.Spanner.getDurationSpanBySite`, :meth:`~music21.spanner.Spanner.getFirst`, :meth:`~music21.spanner.Spanner.getLast`, :meth:`~music21.spanner.Spanner.getOffsetSpanBySite`, :meth:`~music21.spanner.Spanner.getOffsetsBySite`, :meth:`~music21.spanner.Spanner.getSpannerStorageId`, :meth:`~music21.spanner.Spanner.hasComponent`, :meth:`~music21.spanner.Spanner.isFirst`, :meth:`~music21.spanner.Spanner.isLast`, :meth:`~music21.spanner.Spanner.purgeLocations`, :meth:`~music21.spanner.Spanner.purgeOrphans`, :meth:`~music21.spanner.Spanner.replaceComponent`, :meth:`~music21.spanner.Spanner.unfreezeIds`, :meth:`~music21.spanner.Spanner.unwrapWeakref`, :meth:`~music21.spanner.Spanner.wrapWeakref`

        Methods inherited from :class:`~music21.base.Music21Object`: :meth:`~music21.base.Music21Object.searchActiveSiteByAttr`, :meth:`~music21.base.Music21Object.getContextAttr`, :meth:`~music21.base.Music21Object.setContextAttr`, :meth:`~music21.base.Music21Object.addContext`, :meth:`~music21.base.Music21Object.addLocation`, :meth:`~music21.base.Music21Object.addLocationAndActiveSite`, :meth:`~music21.base.Music21Object.getAllContextsByClass`, :meth:`~music21.base.Music21Object.getCommonSiteIds`, :meth:`~music21.base.Music21Object.getCommonSites`, :meth:`~music21.base.Music21Object.getContextByClass`, :meth:`~music21.base.Music21Object.getOffsetBySite`, :meth:`~music21.base.Music21Object.getSiteIds`, :meth:`~music21.base.Music21Object.getSites`, :meth:`~music21.base.Music21Object.getSpannerSites`, :meth:`~music21.base.Music21Object.hasContext`, :meth:`~music21.base.Music21Object.hasSite`, :meth:`~music21.base.Music21Object.hasSpannerSite`, :meth:`~music21.base.Music21Object.hasVariantSite`, :meth:`~music21.base.Music21Object.isClassOrSubclass`, :meth:`~music21.base.Music21Object.mergeAttributes`, :meth:`~music21.base.Music21Object.next`, :meth:`~music21.base.Music21Object.previous`, :meth:`~music21.base.Music21Object.purgeUndeclaredIds`, :meth:`~music21.base.Music21Object.removeLocationBySite`, :meth:`~music21.base.Music21Object.removeLocationBySiteId`, :meth:`~music21.base.Music21Object.setOffsetBySite`, :meth:`~music21.base.Music21Object.show`, :meth:`~music21.base.Music21Object.splitAtDurations`, :meth:`~music21.base.Music21Object.splitAtQuarterLength`, :meth:`~music21.base.Music21Object.splitByQuarterLengths`, :meth:`~music21.base.Music21Object.write`

        Methods inherited from :class:`~music21.base.JSONSerializer`: :meth:`~music21.base.JSONSerializer.jsonAttributes`, :meth:`~music21.base.JSONSerializer.jsonComponentFactory`, :meth:`~music21.base.JSONSerializer.jsonPrint`, :meth:`~music21.base.JSONSerializer.jsonRead`, :meth:`~music21.base.JSONSerializer.jsonWrite`


Line
----

Inherits from: :class:`~music21.spanner.Spanner`, :class:`~music21.base.Music21Object`, :class:`~music21.base.JSONSerializer`

.. class:: Line(*arguments, **keywords)

    A line or bracket represented as a spanner above two Notes.

    Brackets can take many line types.



    >>> from music21 import *
    >>> b = spanner.Line()
    >>> b.lineType = 'dotted'
    >>> b.lineType
    'dotted'
    >>> b = spanner.Line(endHeight=20)
    >>> b.endHeight
    20




    **Line** **attributes**

        Attributes without Documentation: `placement`

        Attributes inherited from :class:`~music21.spanner.Spanner`: :attr:`~music21.spanner.Spanner.isSpanner`, :attr:`~music21.spanner.Spanner.completeStatus`, :attr:`~music21.spanner.Spanner.idLocal`

        Attributes inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.classSortOrder`, :attr:`~music21.base.Music21Object.isStream`, :attr:`~music21.base.Music21Object.isVariant`, :attr:`~music21.base.Music21Object.id`, :attr:`~music21.base.Music21Object.groups`, :attr:`~music21.base.Music21Object.hideObjectOnPrint`

    **Line** **properties**

        .. attribute:: endHeight


            Get or set the endHeight property.



        .. attribute:: endTick


            Get or set the endTick property.



        .. attribute:: lineType


            Get or set the lineType property. Valid line types are "solid", "dashed", "dotted", or "wavy".



            >>> from music21 import *
            >>> b = spanner.Line()
            >>> b.lineType = 'dotted'
            >>> b.lineType = 'junk'
            Traceback (most recent call last):
            SpannerException: not a valid value: junk



        .. attribute:: startHeight


            Get or set the startHeight property.



        .. attribute:: startTick


            Get or set the startTick property.



        .. attribute:: tick


            Set the start and end tick to the same value



            >>> from music21 import *
            >>> b = spanner.Line()
            >>> b.tick = 'arrow'
            >>> b.startTick
            'arrow'
            >>> b.endTick
            'arrow'



        Properties inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.activeSite`, :attr:`~music21.base.Music21Object.beat`, :attr:`~music21.base.Music21Object.beatDuration`, :attr:`~music21.base.Music21Object.beatStr`, :attr:`~music21.base.Music21Object.beatStrength`, :attr:`~music21.base.Music21Object.classes`, :attr:`~music21.base.Music21Object.derivationHierarchy`, :attr:`~music21.base.Music21Object.duration`, :attr:`~music21.base.Music21Object.isGrace`, :attr:`~music21.base.Music21Object.measureNumber`, :attr:`~music21.base.Music21Object.offset`, :attr:`~music21.base.Music21Object.priority`, :attr:`~music21.base.Music21Object.seconds`

        Properties inherited from :class:`~music21.base.JSONSerializer`: :attr:`~music21.base.JSONSerializer.json`

    **Line** **methods**

        .. method:: getEndParameters()

            Return the parameters for the start of this spanner required by MusicXML output.



        .. method:: getStartParameters()

            Return the parameters for the start of this spanners required by MusicXML output.



        Methods inherited from :class:`~music21.spanner.Spanner`: :meth:`~music21.spanner.Spanner.addComponents`, :meth:`~music21.spanner.Spanner.freezeIds`, :meth:`~music21.spanner.Spanner.getComponentIds`, :meth:`~music21.spanner.Spanner.getComponents`, :meth:`~music21.spanner.Spanner.getComponentsByClass`, :meth:`~music21.spanner.Spanner.getDurationBySite`, :meth:`~music21.spanner.Spanner.getDurationSpanBySite`, :meth:`~music21.spanner.Spanner.getFirst`, :meth:`~music21.spanner.Spanner.getLast`, :meth:`~music21.spanner.Spanner.getOffsetSpanBySite`, :meth:`~music21.spanner.Spanner.getOffsetsBySite`, :meth:`~music21.spanner.Spanner.getSpannerStorageId`, :meth:`~music21.spanner.Spanner.hasComponent`, :meth:`~music21.spanner.Spanner.isFirst`, :meth:`~music21.spanner.Spanner.isLast`, :meth:`~music21.spanner.Spanner.purgeLocations`, :meth:`~music21.spanner.Spanner.purgeOrphans`, :meth:`~music21.spanner.Spanner.replaceComponent`, :meth:`~music21.spanner.Spanner.unfreezeIds`, :meth:`~music21.spanner.Spanner.unwrapWeakref`, :meth:`~music21.spanner.Spanner.wrapWeakref`

        Methods inherited from :class:`~music21.base.Music21Object`: :meth:`~music21.base.Music21Object.searchActiveSiteByAttr`, :meth:`~music21.base.Music21Object.getContextAttr`, :meth:`~music21.base.Music21Object.setContextAttr`, :meth:`~music21.base.Music21Object.addContext`, :meth:`~music21.base.Music21Object.addLocation`, :meth:`~music21.base.Music21Object.addLocationAndActiveSite`, :meth:`~music21.base.Music21Object.getAllContextsByClass`, :meth:`~music21.base.Music21Object.getCommonSiteIds`, :meth:`~music21.base.Music21Object.getCommonSites`, :meth:`~music21.base.Music21Object.getContextByClass`, :meth:`~music21.base.Music21Object.getOffsetBySite`, :meth:`~music21.base.Music21Object.getSiteIds`, :meth:`~music21.base.Music21Object.getSites`, :meth:`~music21.base.Music21Object.getSpannerSites`, :meth:`~music21.base.Music21Object.hasContext`, :meth:`~music21.base.Music21Object.hasSite`, :meth:`~music21.base.Music21Object.hasSpannerSite`, :meth:`~music21.base.Music21Object.hasVariantSite`, :meth:`~music21.base.Music21Object.isClassOrSubclass`, :meth:`~music21.base.Music21Object.mergeAttributes`, :meth:`~music21.base.Music21Object.next`, :meth:`~music21.base.Music21Object.previous`, :meth:`~music21.base.Music21Object.purgeUndeclaredIds`, :meth:`~music21.base.Music21Object.removeLocationBySite`, :meth:`~music21.base.Music21Object.removeLocationBySiteId`, :meth:`~music21.base.Music21Object.setOffsetBySite`, :meth:`~music21.base.Music21Object.show`, :meth:`~music21.base.Music21Object.splitAtDurations`, :meth:`~music21.base.Music21Object.splitAtQuarterLength`, :meth:`~music21.base.Music21Object.splitByQuarterLengths`, :meth:`~music21.base.Music21Object.write`

        Methods inherited from :class:`~music21.base.JSONSerializer`: :meth:`~music21.base.JSONSerializer.jsonAttributes`, :meth:`~music21.base.JSONSerializer.jsonComponentFactory`, :meth:`~music21.base.JSONSerializer.jsonPrint`, :meth:`~music21.base.JSONSerializer.jsonRead`, :meth:`~music21.base.JSONSerializer.jsonWrite`


Ottava
------

Inherits from: :class:`~music21.spanner.Spanner`, :class:`~music21.base.Music21Object`, :class:`~music21.base.JSONSerializer`

.. class:: Ottava(*arguments, **keywords)

    An octave shift line



    >>> from music21 import *
    >>> os = spanner.Ottava(type='8va')
    >>> os.type
    '8va'
    >>> os.type = 15
    >>> os.type
    '15ma'
    >>> os.type = 8, 'down'
    >>> os.type
    '8vb'
    >>> print os
    <music21.spanner.Ottava 8vb >



    **Ottava** **attributes**

        Attributes without Documentation: `placement`

        Attributes inherited from :class:`~music21.spanner.Spanner`: :attr:`~music21.spanner.Spanner.isSpanner`, :attr:`~music21.spanner.Spanner.idLocal`, :attr:`~music21.spanner.Spanner.completeStatus`

        Attributes inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.classSortOrder`, :attr:`~music21.base.Music21Object.isStream`, :attr:`~music21.base.Music21Object.isVariant`, :attr:`~music21.base.Music21Object.hideObjectOnPrint`, :attr:`~music21.base.Music21Object.groups`, :attr:`~music21.base.Music21Object.id`

    **Ottava** **properties**

        .. attribute:: type


            Get or set Ottava type. This can be set by as complete string (such as 8va or 15mb) or with a pair specifying size and direction.



            >>> from music21 import *
            >>> os = spanner.Ottava()
            >>> os.type = 15, 'down'
            >>> os.type
            '15mb'
            >>> os.type = '8vb'
            >>> os.type
            '8vb'



        Properties inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.activeSite`, :attr:`~music21.base.Music21Object.beat`, :attr:`~music21.base.Music21Object.beatDuration`, :attr:`~music21.base.Music21Object.beatStr`, :attr:`~music21.base.Music21Object.beatStrength`, :attr:`~music21.base.Music21Object.classes`, :attr:`~music21.base.Music21Object.derivationHierarchy`, :attr:`~music21.base.Music21Object.duration`, :attr:`~music21.base.Music21Object.isGrace`, :attr:`~music21.base.Music21Object.measureNumber`, :attr:`~music21.base.Music21Object.offset`, :attr:`~music21.base.Music21Object.priority`, :attr:`~music21.base.Music21Object.seconds`

        Properties inherited from :class:`~music21.base.JSONSerializer`: :attr:`~music21.base.JSONSerializer.json`

    **Ottava** **methods**

        .. method:: getEndParameters()

            Return the parameters for the start of this spanner required by MusicXML output.



            >>> from music21 import *
            >>> os = spanner.Ottava(type=8)
            >>> os.getStartParameters()
            {'type': 'down', 'size': 8}
            >>> os.getEndParameters()
            {'type': 'stop', 'size': 8}



        .. method:: getStartParameters()

            Return the parameters for the start of this spanners required by MusicXML output.



            >>> from music21 import *
            >>> os = spanner.Ottava(type='15mb')
            >>> os.getStartParameters()
            {'type': 'up', 'size': 15}
            >>> os.getEndParameters()
            {'type': 'stop', 'size': 15}



        Methods inherited from :class:`~music21.spanner.Spanner`: :meth:`~music21.spanner.Spanner.addComponents`, :meth:`~music21.spanner.Spanner.freezeIds`, :meth:`~music21.spanner.Spanner.getComponentIds`, :meth:`~music21.spanner.Spanner.getComponents`, :meth:`~music21.spanner.Spanner.getComponentsByClass`, :meth:`~music21.spanner.Spanner.getDurationBySite`, :meth:`~music21.spanner.Spanner.getDurationSpanBySite`, :meth:`~music21.spanner.Spanner.getFirst`, :meth:`~music21.spanner.Spanner.getLast`, :meth:`~music21.spanner.Spanner.getOffsetSpanBySite`, :meth:`~music21.spanner.Spanner.getOffsetsBySite`, :meth:`~music21.spanner.Spanner.getSpannerStorageId`, :meth:`~music21.spanner.Spanner.hasComponent`, :meth:`~music21.spanner.Spanner.isFirst`, :meth:`~music21.spanner.Spanner.isLast`, :meth:`~music21.spanner.Spanner.purgeLocations`, :meth:`~music21.spanner.Spanner.purgeOrphans`, :meth:`~music21.spanner.Spanner.replaceComponent`, :meth:`~music21.spanner.Spanner.unfreezeIds`, :meth:`~music21.spanner.Spanner.unwrapWeakref`, :meth:`~music21.spanner.Spanner.wrapWeakref`

        Methods inherited from :class:`~music21.base.Music21Object`: :meth:`~music21.base.Music21Object.searchActiveSiteByAttr`, :meth:`~music21.base.Music21Object.getContextAttr`, :meth:`~music21.base.Music21Object.setContextAttr`, :meth:`~music21.base.Music21Object.addContext`, :meth:`~music21.base.Music21Object.addLocation`, :meth:`~music21.base.Music21Object.addLocationAndActiveSite`, :meth:`~music21.base.Music21Object.getAllContextsByClass`, :meth:`~music21.base.Music21Object.getCommonSiteIds`, :meth:`~music21.base.Music21Object.getCommonSites`, :meth:`~music21.base.Music21Object.getContextByClass`, :meth:`~music21.base.Music21Object.getOffsetBySite`, :meth:`~music21.base.Music21Object.getSiteIds`, :meth:`~music21.base.Music21Object.getSites`, :meth:`~music21.base.Music21Object.getSpannerSites`, :meth:`~music21.base.Music21Object.hasContext`, :meth:`~music21.base.Music21Object.hasSite`, :meth:`~music21.base.Music21Object.hasSpannerSite`, :meth:`~music21.base.Music21Object.hasVariantSite`, :meth:`~music21.base.Music21Object.isClassOrSubclass`, :meth:`~music21.base.Music21Object.mergeAttributes`, :meth:`~music21.base.Music21Object.next`, :meth:`~music21.base.Music21Object.previous`, :meth:`~music21.base.Music21Object.purgeUndeclaredIds`, :meth:`~music21.base.Music21Object.removeLocationBySite`, :meth:`~music21.base.Music21Object.removeLocationBySiteId`, :meth:`~music21.base.Music21Object.setOffsetBySite`, :meth:`~music21.base.Music21Object.show`, :meth:`~music21.base.Music21Object.splitAtDurations`, :meth:`~music21.base.Music21Object.splitAtQuarterLength`, :meth:`~music21.base.Music21Object.splitByQuarterLengths`, :meth:`~music21.base.Music21Object.write`

        Methods inherited from :class:`~music21.base.JSONSerializer`: :meth:`~music21.base.JSONSerializer.jsonAttributes`, :meth:`~music21.base.JSONSerializer.jsonComponentFactory`, :meth:`~music21.base.JSONSerializer.jsonPrint`, :meth:`~music21.base.JSONSerializer.jsonRead`, :meth:`~music21.base.JSONSerializer.jsonWrite`


RepeatBracket
-------------

Inherits from: :class:`~music21.spanner.Spanner`, :class:`~music21.base.Music21Object`, :class:`~music21.base.JSONSerializer`

.. class:: RepeatBracket(*arguments, **keywords)

    A grouping of one or more measures, presumably in sequence, that mark an alternate repeat.

    These gather what are sometimes called first-time bars and second-time bars.

    It is assumed that numbering starts from 1. Numberings above 2 are permitted. The `number` keyword argument can be used to pass in the desired number.



    >>> from music21 import *
    >>> m = stream.Measure()
    >>> sp = spanner.RepeatBracket(m, number=1)
    >>> sp # can be one or more measures
    <music21.spanner.RepeatBracket 1 <music21.stream.Measure 0 offset=0.0>>
    >>> sp.number = 3
    >>> sp # can be one or more measures
    <music21.spanner.RepeatBracket 3 <music21.stream.Measure 0 offset=0.0>>
    >>> sp.getNumberList() # the list of repeat numbers
    [3]
    >>> sp.number = '1-3' # range of repeats
    >>> sp.getNumberList()
    [1, 2, 3]
    >>> sp.number = [2,3] # range of repeats
    >>> sp.getNumberList()
    [2, 3]



    **RepeatBracket** **attributes**

        Attributes inherited from :class:`~music21.spanner.Spanner`: :attr:`~music21.spanner.Spanner.isSpanner`, :attr:`~music21.spanner.Spanner.idLocal`, :attr:`~music21.spanner.Spanner.completeStatus`

        Attributes inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.classSortOrder`, :attr:`~music21.base.Music21Object.isStream`, :attr:`~music21.base.Music21Object.isVariant`, :attr:`~music21.base.Music21Object.hideObjectOnPrint`, :attr:`~music21.base.Music21Object.groups`, :attr:`~music21.base.Music21Object.id`

    **RepeatBracket** **properties**

        .. attribute:: number





        Properties inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.activeSite`, :attr:`~music21.base.Music21Object.beat`, :attr:`~music21.base.Music21Object.beatDuration`, :attr:`~music21.base.Music21Object.beatStr`, :attr:`~music21.base.Music21Object.beatStrength`, :attr:`~music21.base.Music21Object.classes`, :attr:`~music21.base.Music21Object.derivationHierarchy`, :attr:`~music21.base.Music21Object.duration`, :attr:`~music21.base.Music21Object.isGrace`, :attr:`~music21.base.Music21Object.measureNumber`, :attr:`~music21.base.Music21Object.offset`, :attr:`~music21.base.Music21Object.priority`, :attr:`~music21.base.Music21Object.seconds`

        Properties inherited from :class:`~music21.base.JSONSerializer`: :attr:`~music21.base.JSONSerializer.json`

    **RepeatBracket** **methods**

        .. method:: getNumberList()

            Get a contiguous list of repeat numbers that are applicable for this instance.



            >>> from music21 import *
            >>> rb = spanner.RepeatBracket()
            >>> rb.number = '1,2'
            >>> rb.getNumberList()
            [1, 2]



        Methods inherited from :class:`~music21.spanner.Spanner`: :meth:`~music21.spanner.Spanner.addComponents`, :meth:`~music21.spanner.Spanner.freezeIds`, :meth:`~music21.spanner.Spanner.getComponentIds`, :meth:`~music21.spanner.Spanner.getComponents`, :meth:`~music21.spanner.Spanner.getComponentsByClass`, :meth:`~music21.spanner.Spanner.getDurationBySite`, :meth:`~music21.spanner.Spanner.getDurationSpanBySite`, :meth:`~music21.spanner.Spanner.getFirst`, :meth:`~music21.spanner.Spanner.getLast`, :meth:`~music21.spanner.Spanner.getOffsetSpanBySite`, :meth:`~music21.spanner.Spanner.getOffsetsBySite`, :meth:`~music21.spanner.Spanner.getSpannerStorageId`, :meth:`~music21.spanner.Spanner.hasComponent`, :meth:`~music21.spanner.Spanner.isFirst`, :meth:`~music21.spanner.Spanner.isLast`, :meth:`~music21.spanner.Spanner.purgeLocations`, :meth:`~music21.spanner.Spanner.purgeOrphans`, :meth:`~music21.spanner.Spanner.replaceComponent`, :meth:`~music21.spanner.Spanner.unfreezeIds`, :meth:`~music21.spanner.Spanner.unwrapWeakref`, :meth:`~music21.spanner.Spanner.wrapWeakref`

        Methods inherited from :class:`~music21.base.Music21Object`: :meth:`~music21.base.Music21Object.searchActiveSiteByAttr`, :meth:`~music21.base.Music21Object.getContextAttr`, :meth:`~music21.base.Music21Object.setContextAttr`, :meth:`~music21.base.Music21Object.addContext`, :meth:`~music21.base.Music21Object.addLocation`, :meth:`~music21.base.Music21Object.addLocationAndActiveSite`, :meth:`~music21.base.Music21Object.getAllContextsByClass`, :meth:`~music21.base.Music21Object.getCommonSiteIds`, :meth:`~music21.base.Music21Object.getCommonSites`, :meth:`~music21.base.Music21Object.getContextByClass`, :meth:`~music21.base.Music21Object.getOffsetBySite`, :meth:`~music21.base.Music21Object.getSiteIds`, :meth:`~music21.base.Music21Object.getSites`, :meth:`~music21.base.Music21Object.getSpannerSites`, :meth:`~music21.base.Music21Object.hasContext`, :meth:`~music21.base.Music21Object.hasSite`, :meth:`~music21.base.Music21Object.hasSpannerSite`, :meth:`~music21.base.Music21Object.hasVariantSite`, :meth:`~music21.base.Music21Object.isClassOrSubclass`, :meth:`~music21.base.Music21Object.mergeAttributes`, :meth:`~music21.base.Music21Object.next`, :meth:`~music21.base.Music21Object.previous`, :meth:`~music21.base.Music21Object.purgeUndeclaredIds`, :meth:`~music21.base.Music21Object.removeLocationBySite`, :meth:`~music21.base.Music21Object.removeLocationBySiteId`, :meth:`~music21.base.Music21Object.setOffsetBySite`, :meth:`~music21.base.Music21Object.show`, :meth:`~music21.base.Music21Object.splitAtDurations`, :meth:`~music21.base.Music21Object.splitAtQuarterLength`, :meth:`~music21.base.Music21Object.splitByQuarterLengths`, :meth:`~music21.base.Music21Object.write`

        Methods inherited from :class:`~music21.base.JSONSerializer`: :meth:`~music21.base.JSONSerializer.jsonAttributes`, :meth:`~music21.base.JSONSerializer.jsonComponentFactory`, :meth:`~music21.base.JSONSerializer.jsonPrint`, :meth:`~music21.base.JSONSerializer.jsonRead`, :meth:`~music21.base.JSONSerializer.jsonWrite`


Slur
----

Inherits from: :class:`~music21.spanner.Spanner`, :class:`~music21.base.Music21Object`, :class:`~music21.base.JSONSerializer`

.. class:: Slur(*arguments, **keywords)

    A slur represented as a spanner between two Notes.

    The `idLocal` attribute, defined in the Spanner base class, is used to mark start and end tags of potentially overlapping indicators.



    **Slur** **attributes**

        Attributes without Documentation: `placement`, `lineType`

        Attributes inherited from :class:`~music21.spanner.Spanner`: :attr:`~music21.spanner.Spanner.isSpanner`, :attr:`~music21.spanner.Spanner.idLocal`, :attr:`~music21.spanner.Spanner.completeStatus`

        Attributes inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.classSortOrder`, :attr:`~music21.base.Music21Object.isStream`, :attr:`~music21.base.Music21Object.isVariant`, :attr:`~music21.base.Music21Object.hideObjectOnPrint`, :attr:`~music21.base.Music21Object.groups`, :attr:`~music21.base.Music21Object.id`

    **Slur** **properties**

        Properties inherited from :class:`~music21.base.Music21Object`: :attr:`~music21.base.Music21Object.activeSite`, :attr:`~music21.base.Music21Object.beat`, :attr:`~music21.base.Music21Object.beatDuration`, :attr:`~music21.base.Music21Object.beatStr`, :attr:`~music21.base.Music21Object.beatStrength`, :attr:`~music21.base.Music21Object.classes`, :attr:`~music21.base.Music21Object.derivationHierarchy`, :attr:`~music21.base.Music21Object.duration`, :attr:`~music21.base.Music21Object.isGrace`, :attr:`~music21.base.Music21Object.measureNumber`, :attr:`~music21.base.Music21Object.offset`, :attr:`~music21.base.Music21Object.priority`, :attr:`~music21.base.Music21Object.seconds`

        Properties inherited from :class:`~music21.base.JSONSerializer`: :attr:`~music21.base.JSONSerializer.json`

    **Slur** **methods**

        Methods inherited from :class:`~music21.spanner.Spanner`: :meth:`~music21.spanner.Spanner.addComponents`, :meth:`~music21.spanner.Spanner.freezeIds`, :meth:`~music21.spanner.Spanner.getComponentIds`, :meth:`~music21.spanner.Spanner.getComponents`, :meth:`~music21.spanner.Spanner.getComponentsByClass`, :meth:`~music21.spanner.Spanner.getDurationBySite`, :meth:`~music21.spanner.Spanner.getDurationSpanBySite`, :meth:`~music21.spanner.Spanner.getFirst`, :meth:`~music21.spanner.Spanner.getLast`, :meth:`~music21.spanner.Spanner.getOffsetSpanBySite`, :meth:`~music21.spanner.Spanner.getOffsetsBySite`, :meth:`~music21.spanner.Spanner.getSpannerStorageId`, :meth:`~music21.spanner.Spanner.hasComponent`, :meth:`~music21.spanner.Spanner.isFirst`, :meth:`~music21.spanner.Spanner.isLast`, :meth:`~music21.spanner.Spanner.purgeLocations`, :meth:`~music21.spanner.Spanner.purgeOrphans`, :meth:`~music21.spanner.Spanner.replaceComponent`, :meth:`~music21.spanner.Spanner.unfreezeIds`, :meth:`~music21.spanner.Spanner.unwrapWeakref`, :meth:`~music21.spanner.Spanner.wrapWeakref`

        Methods inherited from :class:`~music21.base.Music21Object`: :meth:`~music21.base.Music21Object.searchActiveSiteByAttr`, :meth:`~music21.base.Music21Object.getContextAttr`, :meth:`~music21.base.Music21Object.setContextAttr`, :meth:`~music21.base.Music21Object.addContext`, :meth:`~music21.base.Music21Object.addLocation`, :meth:`~music21.base.Music21Object.addLocationAndActiveSite`, :meth:`~music21.base.Music21Object.getAllContextsByClass`, :meth:`~music21.base.Music21Object.getCommonSiteIds`, :meth:`~music21.base.Music21Object.getCommonSites`, :meth:`~music21.base.Music21Object.getContextByClass`, :meth:`~music21.base.Music21Object.getOffsetBySite`, :meth:`~music21.base.Music21Object.getSiteIds`, :meth:`~music21.base.Music21Object.getSites`, :meth:`~music21.base.Music21Object.getSpannerSites`, :meth:`~music21.base.Music21Object.hasContext`, :meth:`~music21.base.Music21Object.hasSite`, :meth:`~music21.base.Music21Object.hasSpannerSite`, :meth:`~music21.base.Music21Object.hasVariantSite`, :meth:`~music21.base.Music21Object.isClassOrSubclass`, :meth:`~music21.base.Music21Object.mergeAttributes`, :meth:`~music21.base.Music21Object.next`, :meth:`~music21.base.Music21Object.previous`, :meth:`~music21.base.Music21Object.purgeUndeclaredIds`, :meth:`~music21.base.Music21Object.removeLocationBySite`, :meth:`~music21.base.Music21Object.removeLocationBySiteId`, :meth:`~music21.base.Music21Object.setOffsetBySite`, :meth:`~music21.base.Music21Object.show`, :meth:`~music21.base.Music21Object.splitAtDurations`, :meth:`~music21.base.Music21Object.splitAtQuarterLength`, :meth:`~music21.base.Music21Object.splitByQuarterLengths`, :meth:`~music21.base.Music21Object.write`

        Methods inherited from :class:`~music21.base.JSONSerializer`: :meth:`~music21.base.JSONSerializer.jsonAttributes`, :meth:`~music21.base.JSONSerializer.jsonComponentFactory`, :meth:`~music21.base.JSONSerializer.jsonPrint`, :meth:`~music21.base.JSONSerializer.jsonRead`, :meth:`~music21.base.JSONSerializer.jsonWrite`


SpannerBundle
-------------



.. class:: SpannerBundle(*arguments, **keywords)

    A utility object for collecting and processing collections of Spanner objects. This is necessary because often processing routines that happen at many different levels need access to the same collection of spanners.

    Because SpannerBundles are so commonly used with :class:`~music21.stream.Stream` objects, the Stream has a :attr:`~music21.stream.Stream.spannerBundle` property that stores and caches a SpannerBundle of the Stream.

    If a Stream or Stream subclass is provided as an argument, all Spanners on this Stream will be accumulated herein.



    **SpannerBundle** **properties**

        .. attribute:: list

            Return the bundle as a list.



    **SpannerBundle** **methods**

        .. method:: append(other)

            No documentation.


        .. method:: freePendingComponentAssignment(componentCandidate)

            No documentation.


        .. method:: getByClass(className)

            Given a spanner class, return a bundle of all Spanners of the desired class.



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su2 = layout.StaffGroup()
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> sb.getByClass(spanner.Slur).list == [su1]
            True
            >>> sb.getByClass('Slur').list == [su1]
            True
            >>> sb.getByClass('StaffGroup').list == [su2]
            True



        .. method:: getByClassComplete(className, completeStatus)

            Get all spanner of a specified class `className` and a `completeStatus`. Convenience routine for multiple filtering



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su1.completeStatus = True
            >>> su2 = layout.StaffGroup()
            >>> su3 = spanner.Slur()
            >>> su3.completeStatus = False
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> sb.append(su3)
            >>> sb.getByClassComplete('Slur', True).list == [su1]
            True
            >>> sb.getByClassComplete('Slur', False).list == [su3]
            True



        .. method:: getByClassIdLocalComplete(className, idLocal, completeStatus)

            Get all spanners of a specified class `className`, an id `idLocal`, and a `completeStatus`. This is a convenience routine for multiple filtering when searching for relevant Spanners to pair with.



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su2 = layout.StaffGroup()
            >>> su2.idLocal = 3
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> sb.getByClassIdLocalComplete('StaffGroup', 3, False).list == [su2]
            True
            >>> su2.completeStatus = True
            >>> sb.getByClassIdLocalComplete('StaffGroup', 3, False).list == []
            True



        .. method:: getByCompleteStatus(completeStatus)

            Get spanners by matching status of `completeStatus` to the same attribute



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su1.idLocal = 1
            >>> su1.completeStatus = True
            >>> su2 = spanner.Slur()
            >>> su2.idLocal = 2
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> sb2 = sb.getByCompleteStatus(True)
            >>> len(sb2)
            1
            >>> sb2 = sb.getByIdLocal(1).getByCompleteStatus(True)
            >>> sb2[0] == su1
            True



        .. method:: getByComponent(component)

            Given a spanner component (an object), return a bundle of all Spanner objects that have this object as a component.



            >>> from music21 import *
            >>> n1 = note.Note()
            >>> n2 = note.Note()
            >>> n3 = note.Note()
            >>> su1 = spanner.Slur(n1, n2)
            >>> su2 = spanner.Slur(n2, n3)
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> sb.getByComponent(n1).list == [su1]
            True
            >>> sb.getByComponent(n3).list == [su2]
            True
            >>> sb.getByComponent(n2).list == [su1, su2]
            True



        .. method:: getByComponentAndClass(component, className)

            Get all Spanners that both contain the component and match the provided class.



        .. method:: getByIdLocal(idLocal=None)

            Get spanners by `idLocal` or `complete` status.

            Returns a new SpannerBundle object



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su1.idLocal = 1
            >>> su2 = spanner.Slur()
            >>> su2.idLocal = 2
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> len(sb)
            2
            >>> len(sb.getByIdLocal(1))
            1
            >>> len(sb.getByIdLocal(2))
            1



        .. method:: getSpannerStorageIds()

            Return all SpannerStorage ids from all contained Spanners



        .. method:: remove(item)

            Remove a stored Spanner from the bundle with an instance. Each reference must have a matching id() value.



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su1.idLocal = 1
            >>> su2 = spanner.Slur()
            >>> su2.idLocal = 2
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> len(sb)
            2
            >>> sb.remove(su2)
            >>> len(sb)
            1




        .. method:: replaceComponent(old, new)

            Given a spanner component (an object), replace all old components with new components for all Spanner objects contained in this bundle.

            The `old` parameter can be either an object or object id.

            If no replacements are found, no errors are raised.



        .. method:: setIdLocalByClass(className, maxId=6)

            Automatically set id local values for all members of the provided class. This is necessary in cases where spanners are newly created in potentially overlapping boundaries and need to be tagged for MusicXML or other output. Note that, if some Spanners already have ids, they will be overwritten.

            The `maxId` parameter sets the largest number used in id ass



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su2 = layout.StaffGroup()
            >>> su3 = spanner.Slur()
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> sb.append(su3)
            >>> [sp.idLocal for sp in sb.getByClass('Slur')]
            [None, None]
            >>> sb.setIdLocalByClass('Slur')
            >>> [sp.idLocal for sp in sb.getByClass('Slur')]
            [1, 2]




        .. method:: setIdLocals()

            Set all id locals for all classes in this SpannerBundle. This will assure that each class has a unique id local number. This is destructive: existing id local values will be lost.



            >>> from music21 import *
            >>> su1 = spanner.Slur()
            >>> su2 = layout.StaffGroup()
            >>> su3 = spanner.Slur()
            >>> sb = spanner.SpannerBundle()
            >>> sb.append(su1)
            >>> sb.append(su2)
            >>> sb.append(su3)
            >>> [sp.idLocal for sp in sb.getByClass('Slur')]
            [None, None]
            >>> sb.setIdLocals()
            >>> [(sp, sp.idLocal) for sp in sb]
            [(<music21.spanner.Slur >, 1), (<music21.layout.StaffGroup >, 1), (<music21.spanner.Slur >, 2)]



        .. method:: setPendingComponentAssignment(sp, className)

            No documentation.



