§
    ƒØj.{  ã                  ó   — U d Z ddlmZ ddl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 ddlmZ  ej        d¦  «        Zd„ Z G d„ dej        ¦  «        Z G d„ d¦  «        Z G d„ dej        ¦  «        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 )zK
Automatically reduce a MeasureStack to a single chord or group of chords.
é    )ÚannotationsN)ÚSequence)Úchord)ÚDocOrder)Úexceptions21)Úenvironment)Úmeter)Únote)Úpitch)Ústream)ÚtreeÚreduceChordsc                 ó  — t          j        ¦   «         } t          j        d¦  «        }t	          j        d¦  «        }d|_        t	          j        d¦  «        }t	          j        d¦  «        }||||fD ]}|                      |¦  «         Œ| S )a5  
    returns a simple measure stream for testing:

    >>> s = analysis.reduceChords.testMeasureStream1()
    >>> s.show('text')
    {0.0} <music21.meter.TimeSignature 4/4>
    {0.0} <music21.chord.Chord C4 E4 G4 C5>
    {2.0} <music21.chord.Chord C4 E4 F4 B4>
    {3.0} <music21.chord.Chord C4 E4 G4 C5>
    z4/4úC4 E4 G4 C5ç       @úC4 E4 F4 B4)r   ÚMeasurer	   ÚTimeSignaturer   ÚChordÚquarterLengthÚappend)ÚmeasureÚtimeSignatureÚchord1Úchord2Úchord3Úelements         ú’/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/analysis/reduceChords.pyÚtestMeasureStream1r   $   sˆ   € õ ŒnÑÔ€GÝÔ'¨Ñ.Ô.€MÝŒ[˜Ñ'Ô'€FØ€FÔÝŒ[˜Ñ'Ô'€FÝŒ[˜Ñ'Ô'€FØ! 6¨6°6Ð:ð  ð  ˆØ�Š�wÑÔÐÐØ€Nó    c                  ó   — e Zd ZdS )ÚChordReducerExceptionN)Ú__name__Ú
__module__Ú__qualname__© r    r   r"   r"   <   s   € € € € € Ø€Dr    r"   c                  óÒ   — e Zd ZdZd„ Z	 	 	 	 d!d„Zed„ ¦   «         Zed"d„¦   «         Zd„ Z	d„ Z
d„ Z	 d#d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 	 d$d„Zd„ Zd%d„Z	 	 	 d&d„Zd„ Zd „ ZdS )'ÚChordReducerz
    A chord reducer.
    c                óH   — | j         | _        d| _        d | _        d | _        d S )Né   )ÚqlbsmpConsonanceÚweightAlgorithmÚ	maxChordsÚpositionInMeasureÚnumberOfElementsInMeasure)Úselfs    r   Ú__init__zChordReducer.__init__C   s*   € Ø#Ô4ˆÔØˆŒØ!%ˆÔØ)-ˆÔ&Ð&Ð&r    NFr*   c                óÌ  — t          |t          j        ¦  «        st          d¦  «        ‚|�mt	          d„ |D ¦   «         ¦  «        st          d¦  «        ‚g }|D ]1}|                      |j        ¦  «        }|                     |¦  «         Œ2t          |¦  «        }|�mt	          d„ |D ¦   «         ¦  «        st          d¦  «        ‚g }|D ]1}|                      |j        ¦  «        }|                     |¦  «         Œ2t          |¦  «        }t          j
                             |dt          j        t          j        f¬¦  «        }	|                      |	¦  «         |                      |	¦  «         |                      |	||¬¦  «         |	                     ¦   «         }
|                      |	|
¦  «         |                      |	|
d	¬
¦  «         |                      |	|
¦  «         |                      |	|
¦  «         |                      |	|
d¬
¦  «         |                      |	|
¦  «         |                      |	|
¦  «         t          j        ¦   «         }dd l}|                     ¦   «         5  |                     dt4          j        ¬¦  «         t          j                             |	|¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t          j        ¦   «         }|                     t          j         ¦  «        D ]5}|  !                    ||| j"        d¬¦  «        }|                     |¦  «         Œ6|                     |¦  «         |r,|t          j                 D ]}| #                    dd¬¦  «         Œ|S )Nz Must be called on a stream.Scorec              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S ©N©Ú
isinstancer   r   ©Ú.0Úxs     r   ú	<genexpr>z#ChordReducer.run.<locals>.<genexpr>S   ó.   è è € ÐKÐK°a•z !¥U¤[Ñ1Ô1ÐKÐKÐKÐKÐKÐKr    z"All allowableChords must be Chordsc              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r4   r5   r7   s     r   r:   z#ChordReducer.run.<locals>.<genexpr>\   r;   r    z"All forbiddenChords must be ChordsT)ÚflattenÚ	classList)Ú	scoreTreeÚallowableChordsÚforbiddenChordsç      à?)Údurationç      ð?r   Úignore)Úcategory)ÚtemplateStreamç      Ð?)ÚmaximumNumberOfChordsr,   Ú	trimBelowé   )ÚforceOctaveÚinPlace)$r6   r   ÚScorer"   ÚallÚ_getIntervalClassSetÚpitchesr   Ú	frozensetr   Ú
fromStreamÚasTimespansr
   ÚNoter   r   ÚremoveZeroDurationTimespansÚsplitByBassÚremoveVerticalDissonancesÚtoPartwiseTimespanTreesÚfillBassGapsÚremoveShortTimespansÚfillMeasureGapsÚwarningsÚcatch_warningsÚsimplefilterr   ÚMusic21DeprecationWarningÚtoStreamÚ
chordifiedÚPartÚgetElementsByClassr   ÚreduceMeasureToNChordsr+   ÚclosedPosition)r0   Ú
inputScorer@   rf   rA   rI   ÚintervalClassSetsr9   ÚintervalClassSetr?   ÚpartwiseTreesÚ	reductionr]   ÚchordifiedReductionÚchordifiedPartr   ÚreducedMeasures                    r   ÚrunzChordReducer.runI   sé  € õ ˜*¥f¤lÑ3Ô3ð 	LÝ'Ð(JÑKÔKÐKàÐ&ÝÐKÐK¸?ÐKÑKÔKÑKÔKð RÝ+Ð,PÑQÔQÐQØ "ÐØ$ð ;ð ;�Ø#'×#<Ò#<¸Q¼YÑ#GÔ#GÐ Ø!×(Ò(Ð)9Ñ:Ô:Ð:Ð:Ý'Ð(9Ñ:Ô:ˆOàÐ&ÝÐKÐK¸?ÐKÑKÔKÑKÔKð RÝ+Ð,PÑQÔQÐQØ "ÐØ$ð ;ð ;�Ø#'×#<Ò#<¸Q¼YÑ#GÔ#GÐ Ø!×(Ò(Ð)9Ñ:Ô:Ð:Ð:Ý'Ð(9Ñ:Ô:ˆOå”O×/Ò/ØØÝ”y¥%¤+Ð.ð 0ñ 0ô 0ˆ	ð
 	×(Ò(¨Ñ3Ô3Ð3Ø×Ò˜Ñ#Ô#Ð#Ø×&Ò&°Ø7FØ7Fð 	'ñ 	Hô 	Hð 	Hð "×9Ò9Ñ;Ô;ˆà×Ò˜) ]Ñ3Ô3Ð3à×!Ò! )¨]ÀSÐ!ÑIÔIÐIØ×Ò˜) ]Ñ3Ô3Ð3Ø×Ò˜Y¨Ñ6Ô6Ð6à×!Ò! )¨]ÀSÐ!ÑIÔIÐIØ×Ò˜) ]Ñ3Ô3Ð3Ø×Ò˜Y¨Ñ6Ô6Ð6å”L‘N”Nˆ	ð 	ˆˆˆØ×$Ò$Ñ&Ô&ð 	ð 	Ø×!Ò! (µ\Ô5[Ð!Ñ\Ô\Ð\Ý"&¤-×":Ò":ØØ)ð #;ñ #ô #Ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ  œ™œˆØ*×=Ò=½f¼nÑMÔMð 	2ð 	2ˆGØ!×8Ò8ØØ&;Ø $Ô 5Øð	 9ñ ô ˆNð ×!Ò! .Ñ1Ô1Ð1Ð1Ø×Ò˜Ñ(Ô(Ð(àð 	>Ø�uœ{Ô+ð >ð >�Ø× Ò ¨Q¸Ð Ñ=Ô=Ð=Ð=àÐs   ÉAJ.Ê.J2Ê5J2c                ó   — |                       ¦   «                              ¦   «         D ]f\  }}t          |¦  «         |D ]}t          d|¦  «         Œ|                     ¦   «         }|dk    r#t          |¦  «         t	          j        d¦  «        ‚Œgd S )Nú	é   zmaximumOverlap is exceeded)rY   ÚitemsÚprintÚmaximumOverlapr   ÚMusic21Exception)r?   ÚpartÚsubtreeÚtimespanÚoverlaps        r   Ú_debugzChordReducer._debug›   s¦   € à&×>Ò>Ñ@Ô@×FÒFÑHÔHð 		ð 		‰MˆD�'Ý�$‰KŒKˆKØ#ð &ð &�Ý�d˜HÑ%Ô%Ð%Ð%Ø×,Ò,Ñ.Ô.ˆGØ˜!Š|ˆ|Ý�d‘”�Ý"Ô3Ø0ñô ð ð ð		ð 		r    Ú
pitches_inú!Sequence[pitch.Pitch | str | int]Úreturnúfrozenset[int]c                ó  — t          ¦   «         }g }| D ]Y}t          |t          j        ¦  «        r|                     |¦  «         Œ2|                     t          j        |¦  «        ¦  «         ŒZt          |¦  «        D ]c\  }}||dz   d…         D ]P}t          t          |j        |j        z
  ¦  «        ¦  «        }|dz  }|dk    rd|z
  }| 	                    |¦  «         ŒQŒdd|v r| 
                    d¦  «         t          |¦  «        S )zÔ
        Return a frozenset of all the interval classes (1-6) in the given
        Sequence (list, tuple, etc.) of pitches or
        things like strings/ints that can be passed to the Pitch constructor.
        rr   Né   é   r   )Úsetr6   r   ÚPitchr   Ú	enumerateÚintÚabsÚpsÚaddÚremoverR   )r|   ÚresultrQ   ÚpÚir9   ÚyÚinterval_ints           r   rP   z!ChordReducer._getIntervalClassSet¨   s   € õ ™5œ5ˆØ%'ˆØð 	/ð 	/ˆAÝ˜!�Uœ[Ñ)Ô)ð /Ø—’˜qÑ!Ô!Ð!Ð!à—’�uœ{¨1™~œ~Ñ.Ô.Ð.Ð.õ ˜gÑ&Ô&ð 	)ð 	)‰DˆAˆqØ˜Q ™U˜V˜V”_ð )ð )�Ý"¥3 q¤t¨a¬d¡{Ñ#3Ô#3Ñ4Ô4�Ø Ñ"�Ø 1Ò$Ð$Ø#%¨Ñ#4�LØ—
’
˜<Ñ(Ô(Ð(Ð(ð)ð �ˆ;ˆ;Ø�MŠM˜!ÑÔÐÝ˜Ñ Ô Ð r    c              #  ó`  K  — t          j        ¦   «         }t          j        t          j        t          j        f}|                     ¦   «         D ]`}t          ||¦  «        sŒ| 	                    |¦  «         t          |¦  «        dk    r%t          |¦  «        V — |                     ¦   «          Œad S )Né   )ÚcollectionsÚdequer   r   r
   rU   ÚRestr=   r6   r   ÚlenÚtupleÚpopleft)r0   ÚinputStreamÚelementBufferÚ	prototyper   s        r   Ú_iterateElementsPairwisez%ChordReducer._iterateElementsPairwiseÃ   s´   è è € Ý#Ô)Ñ+Ô+ˆåŒKÝŒIÝŒIð
ˆ	ð
 #×*Ò*Ñ,Ô,ð 	(ð 	(ˆGÝ˜g yÑ1Ô1ð ØØ× Ò  Ñ)Ô)Ð)Ý�=Ñ!Ô! QÒ&Ð&Ý˜MÑ*Ô*Ð*Ð*Ð*Ø×%Ò%Ñ'Ô'Ð'øð	(ð 	(r    c                óŽ  — |                      d¬¦  «        D �],}|\  }}|j        }|j        }|j        r|j        sŒ%|j        |j        k    rŒ6|j        |j        k    rŒG|                     |¦  «        r\|j        D ]S}|                     |¦  «         |                     |j        ¬¦  «        }|j	        |_	        | 
                    |¦  «         ŒTŒ¸|                     |¦  «        r_|j        D ]W}|j        |j        k     rE|                     |¦  «         |                     |j        ¬¦  «        }| 
                    |¦  «         ŒX�Œ.dS )z9
        Aligns hockets between parts in `tree`.
        r‘   ©Ún©Úoffset©ÚendTimeN)ÚiterateVerticalitiesNwiseÚpitchSetÚisConsonantÚmeasureNumberÚissubsetÚstartTimespansÚremoveTimespanÚnewr    ÚbeatStrengthÚinsertr¢   )	r0   r?   ÚverticalitiesÚverticalityOneÚverticalityTwoÚpitchSetOneÚpitchSetTwory   ÚnewTimespans	            r   ÚalignHocketszChordReducer.alignHocketsÓ   s‘  € ð '×@Ò@À1Ð@ÑEÔEð 	6ñ 	6ˆMØ-:Ñ*ˆN˜NØ(Ô1ˆKØ(Ô1ˆKØ"Ô.ð Ø)Ô5ðàØÔ+¨~Ô/KÒKÐKØØÔ&¨.Ô*AÒAÐAØØ×#Ò# KÑ0Ô0ð 6Ø .Ô =ð 2ð 2�HØ×,Ò,¨XÑ6Ô6Ð6Ø"*§,¢,Ø-Ô4ð #/ñ #ô #�Kð 0>Ô/J�KÔ,Ø×$Ò$ [Ñ1Ô1Ð1Ð1ð2ð ×%Ò% kÑ2Ô2ð 6Ø .Ô =ð 6ð 6�HØÔ'¨.Ô*?Ò?Ð?Ø!×0Ò0°Ñ:Ô:Ð:Ø&.§l¢lØ$2Ô$9ð '3ñ 'ô '˜ð "×(Ò(¨Ñ5Ô5Ð5øùð5	6ð 	6r    c                ó  — |                      d¬¦  «        D �]h}|\  }}|j        r|j        sŒt          |j        ¦  «        }t          |j        ¦  «        }|d         j        |d         j        k    rŒ\|j        |j        k    rŒm|                     |¦  «        }|                     ¦   «         D ]Ñ\  }}	t          |	¦  «        dk     rŒt          d„ |	D ¦   «         ¦  «        sŒ3|	d         j	        |	d         j	        k    rŒP|	d         j	        |	d         j	        z   }
t          j        |
¦  «        }|                     |	¦  «         |	d                              ||	d         j        ¬¦  «        }|                     |¦  «         ŒÒ�ŒjdS )aØ  
        Collapses arpeggios in `tree`.

        >>> m = stream.Measure([chord.Chord('C4 E4'), chord.Chord('C4 G4')])
        >>> cr = analysis.reduceChords.ChordReducer()
        >>> spans = m.asTimespans(classList=(note.NotRest,))
        >>> len(spans)
        2
        >>> cr.collapseArpeggios(spans)
        >>> len(spans)
        1

        OMIT_FROM_DOCS

        Ensure it doesn't crash without a class filter:

        >>> s = corpus.parse('beach')
        >>> cr2 = analysis.reduceChords.ChordReducer()
        >>> excerpt_tree = s.parts.first().asTimespans()
        >>> cr2.collapseArpeggios(excerpt_tree)
        >>> excerpt_tree
        <TimespanTree {163} (0.0 to 124.0) <music21.stream.Part Soprano I>>
        r‘   r�   r   c              3  óT   K  — | ]#}t          |t          j        j        ¦  «        V — Œ$d S r4   )r6   r   ÚspansÚPitchedTimespanr7   s     r   r:   z1ChordReducer.collapseArpeggios.<locals>.<genexpr>*  s1   è è € Ð]Ð]È1�Z¨­4¬:Ô+EÑFÔFÐ]Ð]Ð]Ð]Ð]Ð]r    rr   )r   r¢   N)r£   r¤   ÚsortedÚnameWithOctaver¦   ÚunwrapVerticalitiesrs   r•   rO   rQ   r   r   ÚremoveTimespanListrª   r¢   r¬   )r0   r?   r­   ÚoneÚtwoÚ
onePitchesÚ
twoPitchesÚhorizontalitiesÚunused_partÚtimespanListÚbothPitchesÚsumChordÚmergeds                r   ÚcollapseArpeggioszChordReducer.collapseArpeggiosó   s©  € ð0 '×@Ò@À1Ð@ÑEÔEð *	)ñ *	)ˆMØ$‰HˆC�Ø”<ð  s¤|ð ØÝ ¤Ñ-Ô-ˆJÝ ¤Ñ-Ô-ˆJØ˜!Œ}Ô+¨z¸!¬}Ô/KÒKÐKØØÔ" cÔ&7Ò7Ð7Øð$ (×;Ò;¸MÑJÔJˆOØ-<×-BÒ-BÑ-DÔ-Dð )ð )Ñ)�˜\Ý�|Ñ$Ô$ qÒ(Ð(ØÝÐ]Ð]ÐP\Ð]Ñ]Ô]Ñ]Ô]ð ØØ! !”_Ô,°¸Q´Ô0GÒGÐGØØ*¨1œoÔ5¸ÀQ¼Ô8OÑO�Ý œ; {Ñ3Ô3�Ø×,Ò,¨\Ñ:Ô:Ð:Ø% aœ×,Ò,Ø$Ø(¨œOÔ3ð -ñ ô �ð × Ò  Ñ(Ô(Ð(Ð(ñ)ð9*	)ð *	)r    c                ó&  — |€| j         }i }d| _        t          |¦  «        | _        t	          |¦  «        D ]L\  }}|| _        t          d„ |j        D ¦   «         ¦  «        }||vrd||<   ||xx          ||¦  «        z  cc<   ŒMd| _        d| _        |S )a÷  
        Compute measure chord weights:

        >>> s = analysis.reduceChords.testMeasureStream1().notes
        >>> cr = analysis.reduceChords.ChordReducer()
        >>> cws = cr.computeMeasureChordWeights(s)
        >>> for pcs in sorted(cws):
        ...     print(f'{pcs!r:18}  {cws[pcs]:2.1f}')
            (0, 4, 7)  3.0
        (0, 11, 4, 5)  1.0

        Add beatStrength:

        >>> cws = cr.computeMeasureChordWeights(s,
        ...     weightAlgorithm=cr.quarterLengthBeatStrength)
        >>> for pcs in sorted(cws):
        ...     print(f'{pcs!r:18}  {cws[pcs]:2.1f}')
            (0, 4, 7)  2.2
        (0, 11, 4, 5)  0.5

        Give extra weight to the last element in a measure:

        >>> cws = cr.computeMeasureChordWeights(s,
        ...     weightAlgorithm=cr.quarterLengthBeatStrengthMeasurePosition)
        >>> for pcs in sorted(cws):
        ...     print(f'{pcs!r:18}  {cws[pcs]:2.1f}')
            (0, 4, 7)  3.0
        (0, 11, 4, 5)  0.5

        Make consonance count a lot:

        >>> cws = cr.computeMeasureChordWeights(s,
        ...     weightAlgorithm=cr.qlbsmpConsonance)
        >>> for pcs in sorted(cws):
        ...     print(f'{pcs!r:18}  {cws[pcs]:2.1f}')
             (0, 4, 7)  3.0
         (0, 11, 4, 5)  0.1
        Nr   c                ó   — h | ]	}|j         ’Œ
S r&   ©Ú
pitchClassr7   s     r   ú	<setcomp>z:ChordReducer.computeMeasureChordWeights.<locals>.<setcomp>i  ó   € Ð7Ð7Ð7¨�q”|Ð7Ð7Ð7r    ç        )ÚquarterLengthOnlyr.   r•   r/   r…   r–   rQ   )r0   ÚmeasureObjectr,   Ú
presentPCsr�   ÚcrŒ   s          r   ÚcomputeMeasureChordWeightsz'ChordReducer.computeMeasureChordWeights7  s½   € ðV Ð"Ø"Ô4ˆOØˆ
Ø!"ˆÔÝ),¨]Ñ);Ô);ˆÔ&Ý˜mÑ,Ô,ð 	0ð 	0‰DˆAˆqØ%&ˆDÔ"ÝÐ7Ð7¨Q¬YÐ7Ñ7Ô7Ñ8Ô8ˆAØ˜
Ð"Ð"Ø #�
˜1‘Ø�qˆMˆMŒM˜_˜_¨QÑ/Ô/Ñ/ˆMˆM‰MˆMØ!"ˆÔØ)*ˆÔ&ØÐr    c                ó¦  ‡— ˆfd„}|                      ¦   «         D �]4\  }}t          |¦  «        }t          j        ||¦  «        D �]\  }}t          |¦  «        }	|€Œ|j        |	d         j        k     �rf|j        j        }
|j        }‰                     |	d         ¦  «        }|�®|j        |	d         j        k    rƒdt          |j        ¦  «        z   dz   t          |	d         j        ¦  «        z   dz   t          |¦  «        z   dz   t          |	¦  «        z   dz   t          |	d         ¦  «        z   }t          |¦  «         t          ||j        ¦  «        }‰                     |	d         ¦  «         |                     |	d         ¦  «         |	d                              |¬¦  «        }|
|_        ‰                     |¦  «         |                     |¦  «         ||	d<   |	d	         j        |j        k     rˆ|j        }‰                     |	d	         ¦  «         |                     |	d	         ¦  «         |	d	                              |¬
¦  «        }‰                     |¦  «         |                     |¦  «         ||	d	<   t!          t#          |	¦  «        dz
  ¦  «        D ]µ}|	|         |	|dz            }}|j        |j        k    s|j        |j        k    r€|                     |j        ¬
¦  «        }||	|<   ||	|dz   <   ‰                     ||f¦  «         |                     ||f¦  «         ‰                     |¦  «         |                     |¦  «         Œ¶�Œ
�Œ6d S )Nc                óF   •— ‰                      | j        ¦  «        }|j        S r4   )ÚgetVerticalityAtr    ÚbassTimespan)ry   Úverticalityr?   s     €r   Ú	procedurez,ChordReducer.fillBassGaps.<locals>.procedurer  s!   ø€ Ø#×4Ò4°X´_ÑEÔEˆKØÔ+Ð+r    r   z2Timespan offset errors: previousTimespan.endTime, z should be before z previousTimespan: z	 groups: z group[0]: rŸ   éÿÿÿÿr¡   rr   )rs   ÚlistÚ	itertoolsÚgroupbyr    r   r«   Ú.findPreviousPitchedTimespanInSameStreamByClassr¢   ÚstrÚreprrt   Úmaxr©   rª   r¬   Úranger•   rQ   r»   )r0   r?   rj   rØ   rÁ   rx   rÂ   rÖ   Úgroup_generatorÚgroupr«   r    ÚpreviousTimespanÚmsgr²   r¢   r�   ÚtimespanOneÚtimespanTwos    `                 r   rZ   zChordReducer.fillBassGapsq  s¡  ø€ ð	,ð 	,ð 	,ð 	,ð 	,ð %2×$7Ò$7Ñ$9Ô$9ð 9	4ñ 9	4Ñ ˆK˜Ý ™=œ=ˆLÝ1:Ô1BÀ<ÐQZÑ1[Ô1[ð 74ñ 74Ñ-�˜oÝ˜_Ñ-Ô-�àÐ'ØàÔ&¨¨q¬¬Ò8Ñ8Ø#/Ô#7Ô#D�LØ)Ô0�FØ'0×'_Ò'_Ø˜aœñ(ô (Ð$ð (Ð3Ø+Ô3°e¸A´h´oÒEÐEà TÝ"%Ð&6Ô&>Ñ"?Ô"?ñ!@à"6ñ!7å9<¸UÀ1¼X¼_Ñ9MÔ9Mñ!Nð #8ñ!8õ ;?Ð?OÑ:PÔ:Pñ!Qð #.ñ	!.õ 15°U±´ñ	!<ð
 #0ñ!0õ
 37°u¸Q´x±.´.ñ!Að  õ " #™JœJ˜Jå!$ VÐ-=Ô-EÑ!FÔ!F˜Ø×,Ò,¨U°1¬XÑ6Ô6Ð6Ø×*Ò*¨5°¬8Ñ4Ô4Ð4Ø"'¨¤(§,¢,°f ,Ñ"=Ô"=�KØ/;�KÔ,à×$Ò$ [Ñ1Ô1Ð1Ø—N’N ;Ñ/Ô/Ð/Ø*�E˜!‘Hà˜”9Ô$ |Ô';Ò;Ð;Ø*Ô2�GØ×,Ò,¨U°2¬YÑ7Ô7Ð7Ø×*Ò*¨5°¬9Ñ5Ô5Ð5Ø"'¨¤)§-¢-Ø 'ð #0ñ #ô #�Kð ×$Ò$ [Ñ1Ô1Ð1Ø—N’N ;Ñ/Ô/Ð/Ø +�E˜"‘Iå�s 5™zœz¨A™~Ñ.Ô.ð 
4ð 
4�AØ/4°Q¬x¸¸qÀ1¹u¼ �KØ#Ô+¨{Ô/BÒBÐBØ*Ô2°kÔ6HÒHÐHØ&1§o¢o¸kÔ>Q oÑ&RÔ&R˜Ø#.˜˜a™Ø'2˜˜a !™e™Ø!×4Ò4°kÀ;Ð5OÑPÔPÐPØ×2Ò2°KÀÐ3MÑNÔNÐNØ!×(Ò(¨Ñ5Ô5Ð5ØŸš {Ñ3Ô3Ð3øñ
4ñ[74ð9	4ð 9	4r    c                ó  — |                      ¦   «         D �]k\  }}t          ¦   «         }t          ¦   «         }t          j        |d„ ¦  «        D �]È\  }}t	          |¦  «        }	t          t          |	¦  «        dz
  ¦  «        D ]œ}
|	|
         |	|
dz            }}|j        |j        k    s|j        |j	        k    rg| 
                    |j        ¬¦  «        }||	|
<   ||	|
dz   <   |                     |¦  «         |                     |¦  «         |                     |¦  «         Œ�|	d         j	        |	d         j        k    rc|	d          
                    |	d         j        ¬¦  «        }d|_        |                     |	d         ¦  «         |                     |¦  «         ||	d<   |	d         j        |	d         j        k    r\|	d          
                    |	d         j        ¬¦  «        }|                     |	d         ¦  «         |                     |¦  «         ||	d<   �ŒÊ|                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         �ŒmdS )	z/
        Fills measure gaps in `tree`.
        c                ó   — | j         S r4   )r¦   )r9   s    r   ú<lambda>z.ChordReducer.fillMeasureGaps.<locals>.<lambda>¹  s   €  1¤?€ r    rr   r¡   r   rŸ   rD   rÙ   N)rs   rƒ   rÛ   rÜ   rÚ   rá   r•   rQ   r¢   r    rª   r‰   ÚparentOffsetr«   ÚparentEndTimeÚdifference_updater¬   r»   )r0   r?   rj   rÁ   rx   ÚtoRemoveÚtoInsertÚunused_measureNumberrâ   rã   r�   ræ   rç   r²   s                 r   r\   zChordReducer.fillMeasureGaps±  s  € ð %2×$7Ò$7Ñ$9Ô$9ð %	1ñ %	1Ñ ˆK˜Ý‘u”uˆHÝ‘u”uˆHÝ9BÔ9JØÐ2Ð2ñ:ô :ð ,ñ ,Ñ5Ð$ oõ ˜_Ñ-Ô-�Ý�s 5™zœz¨A™~Ñ.Ô.ð 	2ð 	2�AØ/4°Q¬x¸¸qÀ1¹u¼ �KØ#Ô+¨{Ô/BÒBÐBØ*Ô2°kÔ6HÒHÐHØ&1§o¢o¸kÔ>Q oÑ&RÔ&R˜Ø#.˜˜a™Ø'2˜˜a !™e™Ø Ÿš [Ñ1Ô1Ð1Ø Ÿš [Ñ1Ô1Ð1Ø Ÿš [Ñ1Ô1Ð1øØ˜”8”? e¨A¤hÔ&;Ò;Ð;Ø"'¨¤(§,¢,°e¸A´hÔ6K ,Ñ"LÔ"L�KØ/2�KÔ,à—L’L  q¤Ñ*Ô*Ð*Ø—L’L Ñ-Ô-Ð-Ø*�E˜!‘HØ˜”9Ô$¨¨b¬	Ô(?Ò?Ð?Ø"'¨¤)§-¢-Ø % b¤	Ô 7ð #0ñ #ô #�Kð —L’L  r¤Ñ+Ô+Ð+Ø—L’L Ñ-Ô-Ð-Ø +�E˜"‘Iùð ×&Ò& xÑ0Ô0Ð0Ø×Ò˜XÑ&Ô&Ð&Ø×(Ò(¨Ñ2Ô2Ð2Ø�NŠN˜8Ñ$Ô$Ð$Ø×&Ò& xÑ0Ô0Ð0Ñ0ðK%	1ð %	1r    c                ó€  — d„ }|                      ¦   «         }||         }t          |¦  «        }t          j        ||¦  «        D ]y\  }}t          |¦  «        }t	          |¦  «        dk    rŒ(|                     |¦  «         |d                              |d         j        ¬¦  «        }	|                     |	¦  «         Œzd S )Nc                ó&   — | j         }| j        }||fS r4   )r¦   rQ   )ry   r¦   rQ   s      r   rØ   z3ChordReducer.fuseTimespansByPart.<locals>.procedureÝ  s   € Ø$Ô2ˆMØÔ&ˆGØ  'Ð)Ð)r    rr   r   rÙ   r¡   )	rY   rÚ   rÛ   rÜ   r•   r»   rª   r¢   r¬   )
r0   r?   rw   rØ   Úmappingrx   rÂ   Ú
unused_keyrã   r²   s
             r   ÚfuseTimespansByPartz ChordReducer.fuseTimespansByPartÜ  sÓ   € ð	*ð 	*ð 	*ð
 ×3Ò3Ñ5Ô5ˆØ˜$”-ˆÝ˜G‘}”}ˆÝ!*Ô!2°<ÀÑ!KÔ!Kð 		*ð 		*ÑˆJ˜å˜‘K”KˆEÝ�5‰zŒz˜QŠˆØØ×(Ò(¨Ñ/Ô/Ð/Ø œ(Ÿ,š,Ø˜bœ	Ô)ð 'ñ ô ˆKð ×Ò˜[Ñ)Ô)Ð)Ð)ð		*ð 		*r    c                ó    — |                      ¦   «         rdnd}| j        | j        dz
  k    r|j        }n|                      |¦  «        }||z  }|S )z8
        Everything from before plus consonance
        rD   gš™™™™™¹?rr   )r¥   r.   r/   r   Ú(quarterLengthBeatStrengthMeasurePosition)r0   ÚchordObjectÚconsonanceScoreÚweights       r   r+   zChordReducer.qlbsmpConsonanceð  s`   € ð "-×!8Ò!8Ñ!:Ô!:ÐC˜#˜#ÀˆØÔ! TÔ%CÀaÑ%GÒGÐGà Ô.ˆFˆFà×BÒBÀ;ÑOÔOˆFØ�/Ñ!ˆØˆr    c                ó$   — |j         |j        z  }|S r4   )r   r«   )r0   rø   rú   s      r   ÚquarterLengthBeatStrengthz&ChordReducer.quarterLengthBeatStrengthý  s   € ØÔ*¨[Ô-EÑEˆØˆr    c                ó`   — | j         | j        dz
  k    r|j        S |                      |¦  «        S )Nrr   )r.   r/   r   rü   ©r0   rø   s     r   r÷   z5ChordReducer.quarterLengthBeatStrengthMeasurePosition  s5   € ØÔ! TÔ%CÀaÑ%GÒGÐGØÔ,Ð,à×1Ò1°+Ñ>Ô>Ð>r    c                ó   — |j         S r4   ©r   rþ   s     r   rÎ   zChordReducer.quarterLengthOnly  s   € ØÔ(Ð(r    rr   rH   c                óÄ  — |                       |                     ¦   «         j        |¦  «        }t          |t	          |¦  «        ¦  «        }t          ||j        d¬¦  «        }|d|…         }|sVt          j        ¦   «         }|j	        j
        |_
        |D ]}	|                     |	¦  «         Œ|                     d|¦  «         |S ||d                  }
g }|D ]'}||         |
|z  k    r|                     |¦  «         Œ' d}d}d}|                     t          j        ¦  «        D ]¡}	t!          d„ |	j        D ¦   «         ¦  «        }||v r^||k    rX|€|	j        dk    r|	j        }d|	_        n|�	||_
        d}|	}|	D ]}|j        j        �d|j        j        _        Œ |}||	j
        z  }Œ‚||	j
        z  }|                     |	¦  «         Œ¢|�||_
        t-          dt	          |¦  «        ¦  «        D ]t}||         }	|	j        }|t/          |¦  «        z
  }t1          |d¦  «        d	v r?||dz
           }|xj
        |z  c_
        t/          |¦  «        |	_        |	xj
        |z  c_
        Œu|S )
ae  
        Reduces measure to `n` chords:

        >>> s = analysis.reduceChords.testMeasureStream1()
        >>> cr = analysis.reduceChords.ChordReducer()

        Reduce to a maximum of 3 chords; though here we will only get one
        because the other chord is below the trimBelow threshold.

        >>> newS = cr.reduceMeasureToNChords(s, 3,
        ...     weightAlgorithm=cr.qlbsmpConsonance,
        ...     trimBelow=0.3)
        >>> newS.show('text')
        {0.0} <music21.meter.TimeSignature 4/4>
        {0.0} <music21.chord.Chord C4 E4 G4 C5>

        >>> newS[-1].quarterLength
        4.0
        T)ÚkeyÚreverseNr   rÍ   c                ó   — h | ]	}|j         ’Œ
S r&   rÉ   r7   s     r   rË   z6ChordReducer.reduceMeasureToNChords.<locals>.<setcomp>F  rÌ   r    rr   r*   )rH   g      À?gZd;ßOÕ?gTã¥›Ä °?gX9´Èv¾¯?)rÒ   r=   ÚnotesÚminr•   r¸   Úgetr
   r”   rC   r   rŠ   r¬   r   rd   ÚNotRestr–   rQ   r    r   Ú
accidentalÚdisplayStatusrá   r†   Úround)r0   rÏ   rI   r,   rJ   ÚchordWeightsÚsortedChordWeightsÚ
maxNChordsÚrrÑ   ÚmaxChordWeightÚtrimmedMaxChordsÚpcTuplesÚcurrentGreedyChordÚcurrentGreedyChordPCsÚcurrentGreedyChordNewLengthrŒ   rž   r�   ÚcOffsetCurrentÚcOffsetSyncopÚlastCs                         r   re   z#ChordReducer.reduceMeasureToNChords
  sê  € ð> ×6Ò6Ø×!Ò!Ñ#Ô#Ô)Øñ
ô 
ˆõ !$Ð$9½3¸|Ñ;LÔ;LÑ MÔ MÐÝ#ØØÔ Øð
ñ 
ô 
Ðð
 (Ð(>Ð)>Ð(>Ô?ˆ
Øð 	!Ý”	‘”ˆAØ+Ô4ÔBˆAŒOØ"ð (ð (�Ø×$Ò$ QÑ'Ô'Ð'Ð'Ø× Ò   AÑ&Ô&Ð&Ø Ð Ø% j°¤mÔ4ˆØÐØ"ð 	ð 	ˆHØ˜HÔ%¨¸)Ñ)CÒCÐCØ ×'Ò'¨Ñ1Ô1Ð1Ð1àØ!ÐØ $ÐØ&)Ð#Ø×1Ò1µ$´,Ñ?Ô?ð 	(ð 	(ˆAÝÐ7Ð7¨Q¬YÐ7Ñ7Ô7Ñ8Ô8ˆAØÐ$Ð$Ð$¨Ð.CÒ)CÐ)Cà%Ð-°!´(¸c²/°/Ø23´(Ð/Ø"�A”H�HØ'Ð3Ø7RÐ&Ô4Ø25Ð/Ø%&Ð"Øð @ð @�Aà”wÔ)Ð5Ø;?˜œÔ*Ô8øØ()Ð%Ø+¨q¬Ñ>Ð+Ð+à+¨q¬Ñ>Ð+Ø×$Ò$ QÑ'Ô'Ð'Ð'ØÐ)Ø/JÐÔ,õ �q�#˜mÑ,Ô,Ñ-Ô-ð 	1ð 	1ˆAØ˜aÔ ˆAØœXˆNØ*­S°Ñ-@Ô-@Ñ@ˆMÝ�] AÑ&Ô&Ð*MÐMÐMØ% a¨!¡eÔ,�ØÐ#Ô# }Ñ4Ð#Ô#Ý˜~Ñ.Ô.�”Ø�” =Ñ0�”øØÐr    c                ó¬  — |                      d¬¦  «        D ]¼}|                     |¦  «        }|                     ¦   «         D ]�\  }}|j        s|j        sŒ|d         j        |d         j        k    rŒ1|d                              |d         j        ¬¦  «        }|                     |d         |d         f¦  «         | 	                    |¦  «         Œ‘Œ½dS )zV
        Removes timespans containing passing and neighbor tones from `tree`.
        r*   r�   r   rr   r¡   N)
r£   rº   rs   ÚhasPassingToneÚhasNeighborToner¦   rª   r¢   r»   r¬   )r0   r?   r­   rÀ   rÁ   ÚhorizontalityrÅ   s          r   ÚremoveNonChordTonesz ChordReducer.removeNonChordTonesi  sú   € ð '×@Ò@À1Ð@ÑEÔEð 
	)ð 
	)ˆMØ'×;Ò;¸MÑJÔJˆOØ.=×.CÒ.CÑ.EÔ.Eð )ð )Ñ*�˜]Ø%Ô4ð Ø -Ô =ðàØ" 1Ô%Ô3°}ÀQÔ7GÔ7UÒUÐUØØ& qÔ)×-Ò-°mÀAÔ6FÔ6NÐ-ÑOÔO�Ø×,Ò,¨m¸AÔ.>ÀÈaÔ@PÐ-QÑRÔRÐRØ× Ò  Ñ(Ô(Ð(Ð(ð)ð
	)ð 
	)r    rB   c                ó  ‡‡— ˆˆfd„}|                      ¦   «         D �]`\  }}g }t          j        ||¦  «        D �]\  }}	|\  }
}}t          |	¦  «        }	|sŒd}|	d         j        |	d         j        k    r|	d         j        |	d         j        k    rd}|�.|	d         j        |j        k    r|	d         j        |j        k    rd}|rvt          j	        ¦   «         }|	D ]}||j
        xx         |j        z  cc<   Œ|                     ¦   «         d         \  }}|	D ]"}|j
        |k    r|                     |¦  «         Œ#�Œ|                     |	¦  «         �Œ‰                     |¦  «         |                     |¦  «         �ŒbdS )a  
        Removes timespans in `tree` shorter than `duration`.

        Special treatment is given to groups of short timespans if they take up
        an entire measure. In that case, the timespans with the most common
        sets of pitches are kept.
        c                ó’   •— | j         }| j        ‰k     }‰                     | j        ¦  «        }|j        }|�|j        ‰k     rd }|||fS r4   )r¦   r   rÕ   r    rÖ   )ry   r¦   Úproc_isShortr×   Úproc_bassTimespanrC   r?   s        €€r   rØ   z4ChordReducer.removeShortTimespans.<locals>.procedure�  s^   ø€ Ø$Ô2ˆMØ#Ô1°HÒ<ˆLØ#×4Ò4°X´_ÑEÔEˆKØ +Ô 8ÐØ Ð,Ø$Ô2°XÒ=Ð=Ø(,Ð%Ø  ,Ð0AÐAÐAr    Fr   rÙ   TN)rs   rÛ   rÜ   rÚ   r    rë   r¢   rì   r’   ÚCounterrQ   r   Úmost_commonr   Úextendr»   )r0   r?   rj   rC   rØ   rÁ   rx   ÚtimespansToRemover  rã   rð   ÚisShortrÖ   ÚisEntireMeasureÚcounterÚgroup_timespanÚbestPitchesÚunused_totalDurations    ` `              r   r[   z!ChordReducer.removeShortTimespansy  sô  øø€ ð	Bð 	Bð 	Bð 	Bð 	Bð 	Bð %2×$7Ò$7Ñ$9Ô$9ð 	:ñ 	:Ñ ˆK˜Ø "ÐÝ'Ô/°¸ÑCÔCð 4ñ 4‘
��UØ>AÑ;Ð$ g¨|Ý˜U™œ�Øð ØØ"'�Ø˜”8”? e¨A¤hÔ&;Ò;Ð;Ø˜R”yÔ(¨E°!¬HÔ,BÒBÐBØ*.˜ØÐ+Ø˜Q”x”¨,Ô*=Ò=Ð=Ø  œ9Ô,°Ô0DÒDÐDØ.2˜OØ"ð 	4Ý)Ô1Ñ3Ô3�GØ*/ð Xð X˜Ø Ô 6Ð7Ð7Ô7¸>Ô;WÑWÐ7Ð7Ñ7Ð7Ø8?×8KÒ8KÑ8MÔ8MÈaÔ8PÑ5�KÐ!5Ø*/ð Eð E˜Ø)Ô1°[Ò@Ð@Ø-×4Ò4°^ÑDÔDÐDøñEð &×,Ò,¨UÑ3Ô3Ð3Ñ3Ø×(Ò(Ð):Ñ;Ô;Ð;Ø×&Ò&Ð'8Ñ9Ô9Ð9Ñ9ð5	:ð 	:r    c                ó€  — |                      ¦   «         D ]¨}d}|j        }|                      |¦  «        }|r||v rd}|                     ¦   «                              ¦   «         rd}|r||v rd}|rŒ[|j        }t          |¦  «        }	|j        D ]/}
t          |
j        ¦  «        |	k    r|                     |
¦  «         Œ0Œ©dS )z‘
        Removes timespans in each dissonant verticality of `tree` whose pitches
        are above the lowest pitch in that verticality.
        FTN)	ÚiterateVerticalitiesr¤   rP   ÚtoChordr¥   r  r¨   rQ   r©   )r0   r?   r@   rA   r×   r¥   rQ   ri   r¤   ÚlowestPitchry   s              r   rX   z&ChordReducer.removeVerticalDissonances§  sÿ   € ð %×9Ò9Ñ;Ô;ð 	7ð 	7ˆKØˆKØ!Ô*ˆGØ#×8Ò8¸ÑAÔAÐàð #Ð#3°Ð#FÐ#FØ"�Ø×"Ò"Ñ$Ô$×0Ò0Ñ2Ô2ð #Ø"�Øð $Ð#3°Ð#FÐ#FØ#�Øð àà"Ô+ˆHÝ˜h™-œ-ˆKØ'Ô6ð 7ð 7�Ý�xÔ'Ñ(Ô(¨KÒ7Ð7Ø×,Ò,¨XÑ6Ô6Ð6øð7ð#	7ð 	7r    c                óH   — d„ |D ¦   «         }|                      |¦  «         d S )Nc                ó(   — g | ]}|j         d k    ¯|‘ŒS )r   r   r7   s     r   ú
<listcomp>z<ChordReducer.removeZeroDurationTimespans.<locals>.<listcomp>Ç  s$   € Ð NÐ NÐ N q¸¼ÈAÒ9MÐ9M Ð9MÐ9MÐ9Mr    )r»   )r0   r?   ÚzeroDurationTimespanss      r   rV   z(ChordReducer.removeZeroDurationTimespansÆ  s1   € Ø NÐ N¨IÐ NÑ NÔ NÐØ×$Ò$Ð%:Ñ;Ô;Ð;Ð;Ð;r    c                óþ   — |                      ¦   «         }|D ]}|                      ||¦  «         Œ|                     ¦   «         }|d         }||         }|                     ¦   «         }|                     |¦  «         d S )NrÙ   )ÚallPartsrõ   rY   Ú
allOffsetsÚsplitAt)r0   r?   Úpartsrw   ró   ÚbassPartÚbassTreeÚbassOffsetss           r   rW   zChordReducer.splitByBassÊ  sŠ   € Ø×"Ò"Ñ$Ô$ˆØð 	6ð 	6ˆDØ×$Ò$ Y°Ñ5Ô5Ð5Ð5Ø×3Ò3Ñ5Ô5ˆØ˜”9ˆØ˜8Ô$ˆØ×)Ò)Ñ+Ô+ˆØ×Ò˜+Ñ&Ô&Ð&Ð&Ð&r    )NFNr*   )r|   r}   r~   r   r4   )rr   NrH   )rB   )NNN)r#   r$   r%   Ú__doc__r1   ro   Ústaticmethodr{   rP   r›   r³   rÆ   rÒ   rZ   r\   rõ   r+   rü   r÷   rÎ   re   r  r[   rX   rV   rW   r&   r    r   r(   r(   ?   sË  € € € € € ðð ð.ð .ð .ð !Ø Ø Ø"#ðOð Oð Oð Oðd ð
ð 
ñ „\ð
ð ð!ð !ð !ñ „\ð!ð4(ð (ð (ð 6ð 6ð 6ð@B)ð B)ð B)ðN ð8ð 8ð 8ð 8ðt>4ð >4ð >4ð@)1ð )1ð )1ðV*ð *ð *ð(ð ð ðð ð ð?ð ?ð ?ð)ð )ð )ð  ØØð]ð ]ð ]ð ]ð~)ð )ð )ð ,:ð ,:ð ,:ð ,:ð` ØØð	7ð 7ð 7ð 7ð><ð <ð <ð'ð 'ð 'ð 'ð 'r    r(   c                  ó   — e Zd Zd„ ZdS )ÚTestc                óì   — t          j        ¦   «         }t          j        d¦  «        }d|_        t          j        d¦  «        }t          j        d¦  «        }|||fD ]}|                     |¦  «         Œd S )Nr   r   r   )r   r   r   r   r   r   )r0   ÚsÚc1Úc2Úc3rÑ   s         r   ÚtestSimpleMeasurezTest.testSimpleMeasureÚ  st   € åŒNÑÔˆÝŒ[˜Ñ'Ô'ˆØˆÔÝŒ[˜Ñ'Ô'ˆÝŒ[˜Ñ'Ô'ˆØ�b˜"�ð 	ð 	ˆAØ�HŠH�Q‰KŒKˆKˆKð	ð 	r    N)r#   r$   r%   rE  r&   r    r   r?  r?  Ø  s#   € € € € € ðð ð ð ð r    r?  c                  ó   — e Zd ZdZd„ ZdS )ÚTestExternalTc                óJ  — ddl m} |                     d¦  «                             dd¦  «        }t	          ¦   «         }|                     |t          j        d¦  «        fdd d¬	¦  «        }|D ]}|                     d|¦  «         Œ| j	        r| 	                    ¦   «          d S d S )
Nr   )ÚcorpuszPMFC_06_Giovanni-05_Donnarr   é
   z	F#4 A4 C5Tr*   )r@   rf   rA   rI   )
Úmusic21rI  ÚparseÚmeasuresr(   ro   r   r   r¬   Úshow)r0   rI  ÚscoreÚchordReducerrk   rw   s         r   ÚtestTrecentoMadrigalz!TestExternal.testTrecentoMadrigalè  sÈ   € Ø"Ð"Ð"Ð"Ð"Ð"à—’Ð8Ñ9Ô9×BÒBÀ1ÀbÑIÔIˆõ $‘~”~ˆØ ×$Ò$Øå”˜KÑ(Ô(ðð  Ø Ø"#ð %ñ 
ô 
ˆ	ð ð 	"ð 	"ˆDØ�LŠL˜˜DÑ!Ô!Ð!Ð!àŒ9ð 	Ø�JŠJ‰LŒLˆLˆLˆLð	ð 	r    N)r#   r$   r%   rN  rQ  r&   r    r   rG  rG  å  s(   € € € € € Ø€Dðð ð ð ð r    rG  r   Ú
_DOC_ORDERÚ__main__) r<  Ú
__future__r   r’   Úcollections.abcr   rÛ   ÚunittestrK  r   Úmusic21.common.typesr   r   r   r	   r
   r   r   r   ÚEnvironmentÚenvironLocalr   rv   r"   r(   ÚTestCaser?  rG  rR  Ú__annotations__r#   ÚmainTestr&   r    r   ú<module>r]     s#  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð 'ˆ{Ô& ~Ñ6Ô6€ðð ð ð0	ð 	ð 	ð 	ð 	˜LÔ9ñ 	ô 	ð 	ðS
'ð S
'ð S
'ð S
'ð S
'ñ S
'ô S
'ð S
'ðr
ð 
ð 
ð 
ð 
ˆ8Ôñ 
ô 
ð 
ð ð  ð  ð  ð  �8Ô$ñ  ô  ð  ðJ €
Ð Ð Ð Ñ ð ˆzÒÐà€N€N€NØ€GÔ�\Ñ"Ô"Ð"Ð"Ð"ð Ðr    