§
    ƒØjj  ã                  ó~  — U d Z ddlmZ ddlmZ ddlZddlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  ej        d¦  «        Z G d„ de
j        ¦  «        Z G d„ dej        e¦  «        Z	 	 	 	 dd„Z G d„ dej        ¦  «        Zg Zded<   edk    rddlZ ej        e¦  «         dS dS )z…
This module defines the object model of Volume, covering all representation of
amplitude, volume, velocity, and related parameters.
é    )Úannotations)ÚIterableN)Úarticulations)Úexceptions21)Úcommon)ÚSlottedObjectMixin)Údynamics)Úenvironment)Úprebase)ÚnoteÚvolumec                  ó   — e Zd ZdS )ÚVolumeExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    úƒ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/volume.pyr   r   $   s   € € € € € Ø€Dr   r   c                  ó"  — e Zd ZdZdZdddddœd%d„Zd&d„Zd„ Zd„ Zd„ Z		 	 	 	 	 d'd(d„Z
	 	 	 	 	 d'd)d„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed*d„¦   «         Zej        d+d"„¦   «         Zed,d#„¦   «         Zej        d+d$„¦   «         ZdS )-ÚVolumeaž  
    The Volume object lives on NotRest objects and subclasses. It is not a
    Music21Object subclass.

    Generally, just assume that a Note has a volume object and don't worry
    about creating this class directly:

    >>> n = note.Note('C5')
    >>> v = n.volume
    >>> v.velocity = 20
    >>> v.client is n
    True

    But if you want to create it yourself, you can specify the client, velocity,
    velocityScalar, and

    >>> v = volume.Volume(velocity=90)
    >>> v
    <music21.volume.Volume realized=0.71>
    >>> v.velocity
    90

    * Changed in v9: all constructor attributes are keyword only.
        (client as first attribute was confusing)
    )ÚclientÚ_velocityScalarÚ_cachedRealizedÚvelocityIsRelativeNT)r   ÚvelocityÚvelocityScalarr   r   únote.NotRest | Noner   ú
int | Noner   úfloat | Noner   Úboolc               ó˜   — || _         d | _        |�t          |¦  «        | _        n|�t	          |¦  «        | _        d | _        || _        d S ©N)r   r   Úintr   Úfloatr   r   r   )Úselfr   r   r   r   s        r   Ú__init__zVolume.__init__K   sT   € ð ˆŒØ+/ˆÔØÐÝ ™MœMˆDŒMˆMØÐ'Ý"'¨Ñ"7Ô"7ˆDÔØ#ˆÔØ"4ˆÔÐÐr   c                óN   — t          j        | |dh¬¦  «        }| j        |_        |S )z7
        Don't copy the client; set to current
        r   )ÚignoreAttributes)r   ÚdefaultDeepcopyr   )r&   ÚmemoÚnews      r   Ú__deepcopy__zVolume.__deepcopy___   s+   € õ Ô$ T¨4À8À*ÐMÑMÔMˆØ”[ˆŒ
Øˆ
r   c                ó2   — dt          | j        d¦  «        › �S )Nz	realized=é   )ÚroundÚrealized©r&   s    r   Ú_reprInternalzVolume._reprInternalg   s   € Ø4�5 ¤°Ñ2Ô2Ð4Ð4Ð4r   c                ó6   — | j                              d¦  «        S )aJ  
        Return the dynamic context of this Volume, based on the position of the
        client of this object.

        >>> n = note.Note()
        >>> n.volume.velocityScalar = 0.9
        >>> s = stream.Measure([dynamics.Dynamic('ff'), n])
        >>> n.volume.getDynamicContext()
        <music21.dynamics.Dynamic ff>
        ÚDynamic)r   ÚgetContextByClassr2   s    r   ÚgetDynamicContextzVolume.getDynamicContextk   s   € ð Œ{×,Ò,¨YÑ7Ô7Ð7r   c                ó>   — |�|j         | _         |j        | _        dS dS )ay  
        Given another Volume object, gather all attributes except client.
        Values are always copied, not passed by reference.

        >>> n1 = note.Note()
        >>> v1 = n1.volume
        >>> v1.velocity = 111

        >>> v2 = volume.Volume()
        >>> v2.mergeAttributes(v1)
        >>> v2.client is None
        True
        >>> v2.velocity
        111
        N)r   r   )r&   Úothers     r   ÚmergeAttributeszVolume.mergeAttributesy   s.   € ð  ÐØ#(Ô#8ˆDÔ Ø&+Ô&>ˆDÔ#Ð#Ð#ð Ðr   ç      à?ÚuseDynamicContextúdynamics.Dynamic | boolÚuseArticulationsúHbool | articulations.Articulation | Iterable[articulations.Articulation]c                óp   — |                       |||||¬¦  «        }t          t          |d¦  «        ¦  «        S )z¹
        Return the realized as rounded and formatted string value. Useful for testing.

        >>> v = volume.Volume(velocity=64)
        >>> v.getRealizedStr()
        '0.5'
        )r<   ÚuseVelocityr>   Ú	baseLevelÚclipr/   )ÚgetRealizedÚstrr0   )r&   r<   rA   r>   rB   rC   Úvals          r   ÚgetRealizedStrzVolume.getRealizedStr�   sE   € ð" ×ÒÐ1BØ+6Ø0@Ø)2Ø$(ð	 ñ *ô *ˆõ
 •5˜˜a‘=”=Ñ!Ô!Ð!r   úbool | dynamics.Dynamicc                ó2  — |}d}|r)| j         �| j        s| j         }n|| j         dz  z  }n|dz  }| j        rÆ|durdt          |t          j        ¦  «        r|}n8| j        �|                      ¦   «         }nt                               ddg¦  «         |�||j	        dz  z  }|durZt          |t          j        ¦  «        r|g}n-t          j        |¦  «        r|}n| j        �| j        j
        }ng }|D ]}	||	j        z  }Œ|r|dk    rd}n|d	k     rd
}|| _        |S )a   
        Get a realized unit-interval scalar for this Volume. This scalar is to
        be applied to the dynamic range of whatever output is available,
        whatever that may be.

        The `baseLevel` value is a middle value between 0 and 1 that all
        scalars modify. This also becomes the default value for unspecified
        dynamics. When scalars (between 0 and 1) are used, their values are
        doubled, such that mid-values (around 0.5, which become 1) make no
        change.

        This can optionally take into account `dynamicContext`, `useVelocity`,
        and `useArticulation`.

        If `useDynamicContext` is True, a context search for a dynamic will be
        done, else dynamics are ignored. Alternatively, the useDynamicContext
        may supply a Dynamic object that will be used instead of a context
        search.

        If `useArticulations` is True and client is not None, any articulations
        found on that client will be used to adjust the volume. Alternatively,
        the `useArticulations` parameter may supply an iterable of articulations
        that will be used instead of that available on a client.

        The `velocityIsRelative` tag determines if the velocity value includes
        contextual values, such as dynamics and accents, or not.

        >>> s = stream.Stream()
        >>> s.repeatAppend(note.Note('d3', quarterLength=0.5), 8)
        >>> s.insert([0, dynamics.Dynamic('p'),
        ...           1, dynamics.Dynamic('mp'),
        ...           2, dynamics.Dynamic('mf'),
        ...           3, dynamics.Dynamic('f')])

        >>> s.notes[0].volume.getRealized()
        0.496...

        >>> s.notes[1].volume.getRealized()
        0.496...

        >>> s.notes[2].volume.getRealized()
        0.63779...

        >>> s.notes[7].volume.getRealized()
        0.99212...

        velocity, if set, will be scaled by dynamics:

        >>> s.notes[7].volume.velocity = 20
        >>> s.notes[7].volume.getRealized()
        0.22047...

        Unless we set the velocity to not be relative:

        >>> s.notes[7].volume.velocityIsRelative = False
        >>> s.notes[7].volume.getRealized()
        0.1574803...

        Ng       @g¾Þýñ^µÊ?FzgetRealized():zEuseDynamicContext is True but no dynamic supplied or found in contexté   ç      ð?r   ç        )r   r   Ú
isinstancer	   r5   r   r7   ÚenvironLocalÚ
printDebugÚvolumeScalarr   ÚArticulationr   Ú
isIterableÚvolumeShiftr   )
r&   r<   rA   r>   rB   rC   rF   ÚdmÚamÚas
             r   rD   zVolume.getRealized¥   s–  € ðT ˆØˆð ð 	ØÔ#Ð/ØÔ.ð =ð Ô.�C�Cà Ô!5¸Ñ!;Ñ<�C�Cð �w‘�àÔ"ð 	)Ø ¨Ð-Ð-ÝÐ/µÔ1AÑBÔBð Ø*�B�BØ”[Ð,Ø×/Ò/Ñ1Ô1�B�Bå ×+Ò+Ø(Ø_ð-ñ ô ð ð �>ð  ¤°3Ñ!6Ñ7�Cð   uÐ,Ð,åÐ.µÔ0JÑKÔKð Ø*Ð+�B�BÝÔ&Ð'7Ñ8Ô8ð Ø)�B�BØ”[Ð,ØœÔ2�B�Bà�BØð )ð )�Aà˜1œ=Ñ(�C�CØð 	Ø�QŠwˆwØ��Ø�q’�Ø�ð  #ˆÔØˆ
r   c                óP   — | j         €|                      ¦   «         | _         | j         S )až  
        Return the cached realized value of this volume. This will be the last
        realized value or, if that value has not been set, a newly realized
        value. If the caller knows that the realized values have all been
        recently set, using this property will add significant performance
        boost.

        >>> v = volume.Volume(velocity=128)
        >>> v.cachedRealized
        1.0
        )r   rD   r2   s    r   ÚcachedRealizedzVolume.cachedRealized+  s*   € ð ÔÐ'Ø#'×#3Ò#3Ñ#5Ô#5ˆDÔ ØÔ#Ð#r   c                óF   — t          t          | j        d¦  «        ¦  «        S )zŽ
        Convenience property for testing.

        >>> v = volume.Volume(velocity=128)
        >>> v.cachedRealizedStr
        '1.0'
        r/   )rE   r0   rX   r2   s    r   ÚcachedRealizedStrzVolume.cachedRealizedStr<  s   € õ •5˜Ô,¨aÑ0Ô0Ñ1Ô1Ð1r   c                ó*   — |                       ¦   «         S r#   )rD   r2   s    r   r1   zVolume.realizedG  s   € à×ÒÑ!Ô!Ð!r   Úreturnc                ób   — | j         }|€dS |dz  }|dk    rd}n|dk     rd}t          |¦  «        S )a4  
        Get or set the velocity value, a numerical value between 0 and 127 and
        available setting amplitude on each Note or Pitch in chord.

        >>> n = note.Note()
        >>> n.volume.velocity = 20
        >>> n.volume.client == n
        True

        >>> n.volume.velocity
        20
        Né   r   )r   r0   )r&   ÚvsÚvs      r   r   zVolume.velocityK  sH   € ð Ô!ˆØˆ:Ø�4Ø�‰HˆØˆsŠ7ˆ7ØˆAˆAØ�ŠUˆUØˆAÝ�Q‰xŒxˆr   Úvalueúint | float | Nonec                ó¸   — |€	d | _         d S t          j        |¦  «        st          d|› �¦  «        ‚|dk    r	d| _         d S |dk    r	d| _         d S |dz  | _         d S )Nz2value provided for velocity must be a number, not r   rL   r^   rK   g     À_@)r   r   ÚisNumr   )r&   ra   s     r   r   zVolume.velocityc  s   € àˆ=Ø#'ˆDÔ Ð Ð Ý”˜eÑ$Ô$ð 	1Ý!Ð"^ÐW\Ð"^Ð"^Ñ_Ô_Ð_Ø�aŠZˆZØ#&ˆDÔ Ð Ð Ø�cŠ\ˆ\Ø#&ˆDÔ Ð Ð à#(¨5¡=ˆDÔ Ð Ð r   c                ó   — | j         }|€dS |S )a9  
        Get or set the velocityScalar value, a numerical value between 0
        and 1 and available setting amplitude on each Note or Pitch in
        chord. This value is mapped to the range 0 to 127 on output.

        Note that this value is derived from the set velocity value.
        Floating point error seen here will not be found in the velocity
        value.

        When setting this value, an integer-based velocity value will be
        derived and stored.

        >>> n = note.Note()
        >>> n.volume.velocityScalar = 0.5
        >>> n.volume.velocity
        64

        >>> n.volume.velocity = 127
        >>> n.volume.velocityScalar
        1.0

        If velocity is not set, then this will return None

        >>> n = note.Note()
        >>> n.volume.velocityScalar is None
        True
        N)r   )r&   r`   s     r   r   zVolume.velocityScalarp  s   € ð: Ô ˆØˆ9Ø�4àˆHr   c                óÚ   — |€d | _         t          j        |¦  «        st          dd|› �z   ¦  «        ‚|dk     rd}n(|dk    rd}nt          j        r|€J ‚t          |¦  «        }|| _         d S )Nz4value provided for velocityScalar must be a number, znot r   rL   rJ   rK   )r   r   rd   r   ÚtÚTYPE_CHECKINGr%   )r&   ra   Úscalars      r   r   zVolume.velocityScalar“  s•   € àˆ=Ø#'ˆDÔ åŒ|˜EÑ"Ô"ð 	4Ý!Ð"XØ$2¨5 N Nñ#3ñ 4ô 4ð 4ð �1Š9ˆ9ØˆFˆFØ�QŠYˆYØˆFˆFåŒð )ØÐ(Ð(Ð(Ý˜5‘\”\ˆFØ%ˆÔÐÐr   )r   r   r   r   r   r    r   r!   r#   )TTTr;   T)r<   r=   r>   r?   )r<   rH   r>   r?   )r\   r   )ra   rb   )r\   r    )r   r   r   Ú__doc__Ú	__slots__r'   r-   r3   r7   r:   rG   rD   ÚpropertyrX   rZ   r1   r   Úsetterr   r   r   r   r   r   )   sÊ  € € € € € ðð ð4€Ið %)Ø!Ø%)Ø#'ð5ð 5ð 5ð 5ð 5ð 5ð(ð ð ð ð5ð 5ð 5ð8ð 8ð 8ð?ð ?ð ?ð* CGØ#'ð
  Ø!$Ø ð"ð "ð "ð "ð "ð4 48Øð
 ØØðCð Cð Cð Cð CðL ð$ð $ñ „Xð$ð  ð2ð 2ñ „Xð2ð ð"ð "ñ „Xð"ð ðð ð ñ „Xðð. „_ð
1ð 
1ð 
1ñ „_ð
1ð ð ð  ð  ñ „Xð ðD Ôð&ð &ð &ñ Ôð&ð &ð &r   r   FTc                ó‚  — g }i }|                       ¦   «         }d}|                     t          j        ¦  «        rd}n|du rd}|r¥|                     t          j        d¬¦  «         |                     t          j        ¦  «        }	|	D ]-}
|                     |
¦  «        }||
j        j        z   }|
|||f<   Œ.t          | 	                    ¦   «         ¦  «        }| 
                    ¦   «          d}|D ]Ð}
t          |
d¦  «        r¾t          |
t          j        ¦  «        r¤|
                     |¦  «        }|rT|du rPd}t!          |t#          |¦  «        ¦  «        D ]/}||         \  }}||cxk    r|k    rn Œ|}|||                  } nŒ0n|}|
j                             |||¬¦  «        }|rd|
j        _        ||
j        _        ŒÑdS )am  
    Given a Stream with one level of dynamics
    (e.g., a Part, or two Staffs that share Dynamics),
    destructively modify it to set all realized volume levels.
    These values will be stored in the Volume object as `cachedRealized` values.

    This is a top-down routine, as opposed to bottom-up values available with
    context searches on Volume. This thus offers a performance benefit.

    This is always done in place.

    If setAbsoluteVelocity is True, the realized values will overwrite all
    existing velocity values, and the Volume objects velocityIsRelative
    parameters will be set to False.
    FT)ÚinPlacer   r   )r<   rA   r>   N)ÚflattenÚgetElementsByClassr	   r5   ÚextendDurationÚelementOffsetÚdurationÚquarterLengthÚlistÚkeysÚsortÚhasattrrM   r   ÚNotRestÚgetOffsetBySiteÚrangeÚlenr   rD   r   r   )Ú	srcStreamÚsetAbsoluteVelocityr<   rA   r>   ÚbKeysÚ
boundariesÚflatSrcÚdynamicsAvailableÚelementsÚeÚstartÚendÚlastRelevantKeyIndexÚeStartrT   ÚkrF   s                     r   ÚrealizeVolumer‹   ¬  s-  € ð( €EØ€Jà×ÒÑ!Ô!€Gð ÐØ×!Ò!¥(Ô"2Ñ3Ô3ð &Ø ÐÐà Ð$Ð$Ø %Ðàð 
ð 	×Ò�xÔ/¸ÐÑ>Ô>Ð>Ø×-Ò-­hÔ.>Ñ?Ô?ˆØð 	)ð 	)ˆAØ×)Ò)¨!Ñ,Ô,ˆEØ˜!œ*Ô2Ñ2ˆCØ'(ˆJ˜˜s�|Ñ$Ð$Ý�Z—_’_Ñ&Ô&Ñ'Ô'ˆØ�
Š
‰Œˆð
 ÐØð .ð .ˆÝ�1�hÑÔð 	.¥J¨qµ$´,Ñ$?Ô$?ð 	.à×&Ò& wÑ/Ô/ˆFð !ð 'Ð%6¸$Ð%>Ð%>Ø�ÝÐ3µS¸±Z´ZÑ@Ô@ð ð �AØ!& q¤‘J�E˜3Ø˜VÐ,Ð,Ò,Ð, uÒ,Ð,Ð,Ð,Ð,ð 01Ð,Ø'¨¨a¬Ô1˜Ø˜ð -øð '�ð ”(×&Ò&¸Ø3>Ø8Hð 'ñ Jô JˆCð #ð .Ø.3�”Ô+à*-�”Ô'øð5.ð .r   c                  óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTestc                ó(  — dd l }ddlm} t          j        d¦  «        }|                     |¬¦  «        }|                      |j        |¦  «         ~|                     ¦   «          |                      |j        t          j        d¦  «        ¦  «         d S )Nr   ©r   zG#4©r   )	ÚgcÚmusic21r   r   ÚNoter   ÚassertEqualr   Úcollect)r&   r‘   r   Ún1r`   s        r   Ú	testBasiczTest.testBasicý  s�   € Øˆ	ˆ	ˆ	Ø"Ð"Ð"Ð"Ð"Ð"åŒY�uÑÔˆØ�MŠM ˆMÑ$Ô$ˆØ×Ò˜œ 2Ñ&Ô&Ð&ØØ
�
Š
‰Œˆà×Ò˜œ¥4¤9¨UÑ#3Ô#3Ñ4Ô4Ð4Ð4Ð4r   c                ó  — ddl m} ddl m} |                     ¦   «         }t	          j        d¦  «        }|                     d|¦  «         t	          j        d¦  «        }|                     d|¦  «         t          j        d¦  «        }| 	                    |¬¦  «        }|                     d	|¦  «         |  
                    |j                             d
¦  «        |¦  «         |  
                    |                     ¦   «         |¦  «         d S )Nr   ©Ústreamr�   ÚmfÚfr/   Úgr�   é   r5   )r’   rš   r   ÚStreamr	   r5   Úinsertr   r“   r   r”   r   r6   r7   )r&   rš   r   ÚsÚd1Úd2r–   Úv1s           r   ÚtestGetContextSearchAzTest.testGetContextSearchA
  sö   € Ø"Ð"Ð"Ð"Ð"Ð"Ø"Ð"Ð"Ð"Ð"Ð"à�MŠM‰OŒOˆÝÔ˜dÑ#Ô#ˆØ	�Š��B‰ŒˆÝÔ˜cÑ"Ô"ˆØ	�Š��B‰ŒˆåŒY�s‰^Œ^ˆØ�]Š] "ˆ]Ñ%Ô%ˆØ	�Š��B‰Œˆð 	×Ò˜œ×4Ò4°YÑ?Ô?ÀÑDÔDÐDØ×Ò˜×-Ò-Ñ/Ô/°Ñ4Ô4Ð4Ð4Ð4r   c                ó�  — ddl m} |                     ¦   «         }t          j        d¦  «        }|                     d|¦  «         t          j        d¦  «        }|                     d|¦  «         t          j        d¦  «        }|                     d|¦  «         |                      |j	         
                    ¦   «         |¦  «         d S )Nr   r™   r›   rœ   r/   r�   rž   )r’   rš   rŸ   r	   r5   r    r   r“   r”   r   r7   )r&   rš   r¡   r¢   r£   r–   s         r   ÚtestGetContextSearchBzTest.testGetContextSearchB  s­   € Ø"Ð"Ð"Ð"Ð"Ð"à�MŠM‰OŒOˆÝÔ˜dÑ#Ô#ˆØ	�Š��B‰ŒˆÝÔ˜cÑ"Ô"ˆØ	�Š��B‰ŒˆåŒY�s‰^Œ^ˆØ	�Š��B‰Œˆð 	×Ò˜œ×4Ò4Ñ6Ô6¸Ñ;Ô;Ð;Ð;Ð;r   c                ó†  — dd l }ddlm} t          j        ¦   «         }|                     ¦   «         }d|_        ||_        |                     |¦  «        }|  	                    |j        d¦  «         |  	                    |j        d¦  «         |  	                    |j        |¦  «         |  	                    |j        |¦  «         d S )Nr   r�   éo   )
Úcopyr’   r   r   r“   r   r   r   Údeepcopyr”   )r&   rª   r   r–   r¤   Úv1Copys         r   ÚtestDeepCopyAzTest.testDeepCopyA-  sº   € ØˆˆˆØ"Ð"Ð"Ð"Ð"Ð"ÝŒY‰[Œ[ˆà�]Š]‰_Œ_ˆØˆŒØˆŒ	à—’˜rÑ"Ô"ˆØ×Ò˜œ cÑ*Ô*Ð*Ø×Ò˜œ¨#Ñ.Ô.Ð.à×Ò˜œ BÑ'Ô'Ð'Ø×Ò˜œ¨Ñ+Ô+Ð+Ð+Ð+r   c                ó  — ddl m} |                     d¬¦  «        }|                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                      |                     |¬¦  «        d¦  «         t          j        d	¦  «        }|                      |                     |¬¦  «        d
¦  «         t          j        d¦  «        }|                      |                     |¬¦  «        d¦  «         |                     d¬¦  «        }t          j        d¦  «        }|                      |                     |¬¦  «        d¦  «         t          j        d	¦  «        }|                      |                     |¬¦  «        d¦  «         t          j        d¦  «        }|                      |                     |¬¦  «        d¦  «         t          j        d¦  «        }|                      |                     |¬¦  «        d¦  «         d S )Nr   r�   é@   ©r   ú0.5Úp)r<   ú0.35Úpppz0.15Úfffz0.91r^   ú1.0z0.3Úmpz0.9z0.7)r’   r   r   r”   rG   r	   r5   )r&   r   r¤   r¢   s       r   ÚtestGetRealizedAzTest.testGetRealizedA>  sç  € Ø"Ð"Ð"Ð"Ð"Ð"à�]Š] Bˆ]Ñ'Ô'ˆØ×Ò˜×*Ò*Ñ,Ô,¨eÑ4Ô4Ð4åÔ˜cÑ"Ô"ˆØ×Ò˜×*Ò*¸RÐ*Ñ@Ô@À&ÑIÔIÐIåÔ˜eÑ$Ô$ˆØ×Ò˜×*Ò*¸RÐ*Ñ@Ô@À&ÑIÔIÐIõ Ô˜eÑ$Ô$ˆØ×Ò˜×*Ò*¸RÐ*Ñ@Ô@À&ÑIÔIÐIð �]Š] Cˆ]Ñ(Ô(ˆÝÔ˜eÑ$Ô$ˆØ×Ò˜×*Ò*¸RÐ*Ñ@Ô@À%ÑHÔHÐHåÔ˜eÑ$Ô$ˆØ×Ò˜×*Ò*¸RÐ*Ñ@Ô@À%ÑHÔHÐHÝÔ˜dÑ#Ô#ˆØ×Ò˜×*Ò*¸RÐ*Ñ@Ô@À%ÑHÔHÐHÝÔ˜cÑ"Ô"ˆØ×Ò˜×*Ò*¸RÐ*Ñ@Ô@À%ÑHÔHÐHÐHÐHr   c                ój  — t          d¬¦  «        }|                      |                     ¦   «         d¦  «         t          j        ¦   «         }|                      |                     |¬¦  «        d¦  «         t          j        ¦   «         }|                      |                     |¬¦  «        d¦  «         d S )Nr¯   r°   r±   )r>   z0.65z0.6)r   r”   rG   r   ÚStrongAccentÚAccent)r&   r¤   Úa1Úa2s       r   ÚtestGetRealizedBzTest.testGetRealizedB\  s¤   € Ý˜RÐ Ñ Ô ˆØ×Ò˜×*Ò*Ñ,Ô,¨eÑ4Ô4Ð4åÔ'Ñ)Ô)ˆØ×Ò˜×*Ò*¸BÐ*Ñ?Ô?ÀÑHÔHÐHåÔ!Ñ#Ô#ˆØ×Ò˜×*Ò*¸BÐ*Ñ?Ô?ÀÑGÔGÐGÐGÐGr   c                óf  — ddl m} ddl m} |                     ¦   «         }|                     t          j        d¦  «        d¦  «         d„ |j        D ¦   «         }|                      |dgdz  ¦  «         t          g d¢¦  «        D ]0\  }}| 
                    |d	z  t          j        |¦  «        ¦  «         Œ1d
„ |j        D ¦   «         }|                      |dgdz  ¦  «         |                     |¦  «         d„ |j        D ¦   «         }|                      |g d¢¦  «         |                     ¦   «         }|                     t          j        d¦  «        d¦  «         t          g d¢¦  «        D ]0\  }}| 
                    |d	z  t          j        |¦  «        ¦  «         Œ1d„ |j        D ¦   «         }|                      |g d¢¦  «         d„ |j        D ¦   «         }|                      |d gdz  ¦  «         |                     |d¬¦  «         d„ |j        D ¦   «         }|                      |g d¢¦  «         d S )Nr   r™   r�   Úg3é   c                ó&   — g | ]}|j         j        ‘ŒS r   ©r   rZ   ©Ú.0Úns     r   ú
<listcomp>z+Test.testRealizeVolumeA.<locals>.<listcomp>u  ó   € Ð=Ð=Ð=°�”Ô+Ð=Ð=Ð=r   ú0.71)Úppr²   r·   rœ   r›   Úffr´   r›   r/   c                ó&   — g | ]}|j         j        ‘ŒS r   rÃ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeA.<locals>.<listcomp>|  rÈ   r   c                ó&   — g | ]}|j         j        ‘ŒS r   rÃ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeA.<locals>.<listcomp>�  rÈ   r   )r³   r³   r±   r±   ú0.64rÎ   ú0.99rÏ   ú0.78rÐ   r¶   r¶   ú0.21rÑ   rÐ   rÐ   c                ó&   — g | ]}|j         j        ‘ŒS r   rÃ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeA.<locals>.<listcomp>Ž  rÈ   r   c                ó&   — g | ]}|j         j        ‘ŒS r   ©r   r   rÄ   s     r   rÇ   z+Test.testRealizeVolumeA.<locals>.<listcomp>™  ó   € Ð4Ð4Ð4 q�”Ô"Ð4Ð4Ð4r   T)r   c                ó&   — g | ]}|j         j        ‘ŒS r   rÔ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeA.<locals>.<listcomp>ž  rÕ   r   )é-   r×   é?   rØ   éQ   rÙ   é~   rÚ   éc   rÛ   r^   r^   é   rÜ   rÛ   rÛ   )r’   rš   r   rŸ   ÚrepeatAppendr   r“   Únotesr”   Ú	enumerater    r	   r5   r‹   )r&   rš   r   r¡   ÚmatchÚiÚds          r   ÚtestRealizeVolumeAzTest.testRealizeVolumeAm  sž  € Ø"Ð"Ð"Ð"Ð"Ð"Ø"Ð"Ð"Ð"Ð"Ð"à�MŠM‰OŒOˆØ	�Š•t”y ‘”¨Ñ+Ô+Ð+ð >Ð=°Q´WÐ=Ñ=Ô=ˆØ×Ò˜  ¨2¡Ñ.Ô.Ð.åÐMÐMÐMÑNÔNð 	1ð 	1‰DˆAˆqØ�HŠH�Q˜‘U�HÔ,¨QÑ/Ô/Ñ0Ô0Ð0Ð0ð >Ð=°Q´WÐ=Ñ=Ô=ˆØ×Ò˜  ¨2¡Ñ.Ô.Ð.ð 	×Ò˜QÑÔÐØ=Ð=°Q´WÐ=Ñ=Ô=ˆØ×Ò˜ð !Að !Að !Añ 	Bô 	Bð 	Bð �MŠM‰OŒOˆØ	�Š•t”y ‘”¨Ñ+Ô+Ð+åÐMÐMÐMÑNÔNð 	1ð 	1‰DˆAˆqØ�HŠH�Q˜‘U�HÔ,¨QÑ/Ô/Ñ0Ô0Ð0Ð0Ø=Ð=°Q´WÐ=Ñ=Ô=ˆØ×Ò˜ð !1ð !1ð !1ñ 	2ô 	2ð 	2ð 5Ð4¨A¬GÐ4Ñ4Ô4ˆØ×Ò˜  ¨¡Ñ,Ô,Ð,ð 	×Ò˜Q°DÐÑ9Ô9Ð9Ø4Ð4¨A¬GÐ4Ñ4Ô4ˆØ×Ò˜ð !;ð !;ð !;ñ 	<ô 	<ð 	<ð 	<ð 	<r   c                óœ  — ddl m} ddl m} |                     d¦  «        }|j        dz  }g d¢}t          |j        ¦  «        D ]µ\  }}t          |¦  «        D ]‹\  }}	||z  }
|                     |
d¬¦  «                             |j	        ¦  «         
                    ¦   «         }|
|                     |¦  «        z
  }|                     |t          j        |	¦  «        ¦  «         ŒŒ|d	d …         |d d	…         z   }Œ¶d
„ |j        d                              ¦   «         j        D ¦   «         }|                      |g d¢¦  «         d„ |j        d                              ¦   «         j        D ¦   «         }|                      |g d¢¦  «         d„ |j        d                              ¦   «         j        D ¦   «         }|                      |g d¢¦  «         d S )Nr   )Úcorpusr™   zbwv66.6é   )rÊ   r²   r·   rœ   r›   rË   rœ   r›   F)ÚmustBeginInSpanr/   c                ó&   — g | ]}|j         j        ‘ŒS r   rÃ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeB.<locals>.<listcomp>½  ó   € ÐPÐPÐP°�”Ô+ÐPÐPÐPr   )%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Ï   rÏ   rÏ   rÐ   rÐ   rÐ   rÐ   rÐ   rÐ   rÐ   c                ó&   — g | ]}|j         j        ‘ŒS r   rÃ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeB.<locals>.<listcomp>Ç  ré   r   rJ   )*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³   r³   r³   r³   r³   r³   r±   r±   r±   r±   r±   r±   r±   r±   r±   c                ó&   — g | ]}|j         j        ‘ŒS r   rÃ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeB.<locals>.<listcomp>Ò  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Î   rÏ   rÏ   rÏ   rÏ   rÐ   rÐ   rÐ   rÐ   rÐ   r¶   r¶   r¶   r¶   r¶   r¶   )r’   rå   rš   ÚparseÚhighestTimerß   ÚpartsÚgetElementsByOffsetrq   ÚMeasureÚfirstr{   r    r	   r5   rp   rÞ   r”   )r&   rå   rš   r¡   ÚdurUnitÚdynsrá   r²   Újrâ   ÚoTargetÚmÚoInsertrà   s                 r   ÚtestRealizeVolumeBzTest.testRealizeVolumeB¤  s9  € Ø"Ð"Ð"Ð"Ð"Ð"Ø"Ð"Ð"Ð"Ð"Ð"à�LŠL˜Ñ#Ô#ˆà”- 1Ñ$ˆØ<Ð<Ð<ˆå˜aœgÑ&Ô&ð 
	'ð 
	'‰DˆAˆqÝ! $™œð 7ð 7‘��1Ø˜g™+�à×)Ò)¨'Ø:?ð *ñ ,ô ,ç,>Ò,>¸v¼~Ñ,NÔ,NÏuÊuÉwÌwð ð " A×$5Ò$5°aÑ$8Ô$8Ñ8�Ø—’˜¥(Ô"2°1Ñ"5Ô"5Ñ6Ô6Ð6Ð6à˜˜˜”8˜d 2 A 2œhÑ&ˆDˆDð QÐP°Q´W¸Q´Z×5GÒ5GÑ5IÔ5IÔ5OÐPÑPÔPˆØ×Ò˜ð !Yð !Yð !Yñ 	Zô 	Zð 	Zð QÐP°Q´W¸Q´Z×5GÒ5GÑ5IÔ5IÔ5OÐPÑPÔPˆà×Ò˜ð !`ð !`ð !`ñ 	aô 	að 	að QÐP°Q´W¸Q´Z×5GÒ5GÑ5IÔ5IÔ5OÐPÑPÔPˆà×Ò˜ð !Kð !Kð !Kñ 	Lô 	Lð 	Lð 	Lð 	Lr   c                ó  — ddl m} |                     ¦   «         }|                     t	          j        d¦  «        d¦  «         t          ddd¦  «        D ]8}|j        |         j         	                    t          j
        ¦   «         ¦  «         Œ9t          ddd¦  «        D ]8}|j        |         j         	                    t          j        ¦   «         ¦  «         Œ9d„ |j        D ¦   «         }|                      |g d¢¦  «         d S )	Nr   r™   rÀ   rÁ   rì   rž   c                ó&   — g | ]}|j         j        ‘ŒS r   rÃ   rÄ   s     r   rÇ   z+Test.testRealizeVolumeC.<locals>.<listcomp>é  rÈ   r   )ú0.96rÉ   rÉ   ú0.81ú0.86rÉ   rý   rÉ   rþ   rý   rÉ   rÉ   rü   rÉ   rÉ   rý   )r’   rš   rŸ   rÝ   r   r“   r|   rÞ   r   Úappendr»   rº   r”   )r&   rš   r¡   rá   rà   s        r   ÚtestRealizeVolumeCzTest.testRealizeVolumeCÞ  s  € Ø"Ð"Ð"Ð"Ð"Ð"à�MŠM‰OŒOˆØ	�Š•t”y ‘”¨Ñ+Ô+Ð+å�q˜"˜a‘”ð 	Dð 	DˆAØŒG�AŒJÔ$×+Ò+­MÔ,@Ñ,BÔ,BÑCÔCÐCÐCÝ�q˜"˜a‘”ð 	Jð 	JˆAØŒG�AŒJÔ$×+Ò+­MÔ,FÑ,HÔ,HÑIÔIÐIÐIà=Ð=°Q´WÐ=Ñ=Ô=ˆØ×Ò˜ð !1ð !1ð !1ñ 	2ô 	2ð 	2ð 	2ð 	2r   N)r   r   r   r—   r¥   r§   r­   r¸   r¾   rã   rù   r   r   r   r   r�   r�   û  s¦   € € € € € ð
5ð 
5ð 
5ð5ð 5ð 5ð&<ð <ð <ð ,ð ,ð ,ð"Ið Ið Ið<Hð Hð Hð"3<ð 3<ð 3<ðn7Lð 7Lð 7Lðt2ð 2ð 2ð 2ð 2r   r�   z
list[type]Ú
_DOC_ORDERÚ__main__)FTTT)rj   Ú
__future__r   Úcollections.abcr   Útypingrg   Úunittestr’   r   r   r   Úmusic21.common.objectsr   r	   r
   r   r   ÚEnvironmentrN   ÚMusic21Exceptionr   ÚProtoM21Objectr   r‹   ÚTestCaser�   r  Ú__annotations__r   ÚmainTestr   r   r   ú<module>r     sþ  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ø €€€à !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à&ˆ{Ô& xÑ0Ô0€ð	ð 	ð 	ð 	ð 	�lÔ3ñ 	ô 	ð 	ð
|&ð |&ð |&ð |&ð |&ˆWÔ#Ð%7ñ |&ô |&ð |&ðH ',Ø$(Ø"Ø#'ð	K.ð K.ð K.ð K.ð^q2ð q2ð q2ð q2ð q2ˆ8Ôñ q2ô q2ð q2ðl €
Ð Ð Ð Ñ ð ˆzÒÐØ€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr   