§
    ƒØj_  ã                  ón  — d Z ddlmZ ddlmZ ddl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  ej        d
¦  «        Z edg d¢¦  «        Zd„ Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Zd„ Zd„ Z G d„ dej        ¦  «        Zedk    rddlZ ej        e¦  «         dS dS )zV
Functions for finding external modules, converting colors to Matplotlib colors, etc.
é    )Úannotations)Ú
namedtupleN)Ú_missingImport)Úcommon)Úenvironment)Úexceptions21)Úpitchzgraph.utilitiesÚExtendedModules©Ú
matplotlibÚAxes3DÚcollectionsÚpatchesÚpltc                 óì   — dt           v rt          d¦  «        ‚ddl} 	 ddlm} n,# t
          $ r d}t                               d¦  «         Y nw xY wddlm} ddlm	} ddl
m} t          | ||||¦  «        S )	zä
    this is done inside a function, so that the slow import of matplotlib is not done
    in ``from music21 import *`` unless it's actually needed.

    Returns a namedtuple: (matplotlib, Axes3D, collections, patches, plt)
    r   z2could not find matplotlib, graphing is not allowedr   N)r   z€mpl_toolkits.mplot3d.Axes3D could not be imported -- likely cause is an old version of six.py (< 1.9.0) on your system somewhere)r   )r   )r   ÚGraphExceptionr   Úmpl_toolkits.mplot3dr   ÚImportErrorÚenvironLocalÚwarnr   r   Úmatplotlib.pyplotÚpyplotr
   r   s        úŒ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/music21/graph/utilities.pyÚgetExtendedModulesr   #   så   € ð •~Ð%Ð%ÝØ@ñBô Bð 	BàÐÐÐð
Ø/Ð/Ð/Ð/Ð/Ð/Ð/øÝð 
ð 
ð 
ØˆÝ×ÒðIñ	
ô 	
ð 	
ð 	
ð 	
ð
øøøð 'Ð&Ð&Ð&Ð&Ð&Ø"Ð"Ð"Ð"Ð"Ð"ð $Ð#Ð#Ð#Ð#Ð#å˜: v¨{¸GÀSÑIÔIÐIs   ž% ¥&AÁAc                  ó   — e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__© ó    r   r   r   E   ó   € € € € € Ø€Dr!   r   c                  ó   — e Zd ZdS )ÚPlotStreamExceptionNr   r    r!   r   r$   r$   I   r"   r!   r$   c                óÈ   — t          | t          ¦  «        s| S t          j                             ¦   «         D ]+\  }}|dk    r || v r|dv r|                      ||¦  «        }  nŒ,| S )uu  
    Changes a label possibly containing a modifier such as "-" or "#" into
    a unicode string.

    >>> graph.utilities.accidentalLabelToUnicode('B-4')
    'Bâ™­4'

    Since matplotlib's default fonts do not support double sharps or double flats,
    etc. these are converted as best we can.

    >>> graph.utilities.accidentalLabelToUnicode('B--4')
    'Bâ™­â™­4'
    Ú )ú-ú#)Ú
isinstanceÚstrr	   ÚunicodeFromModifierÚitemsÚreplace)ÚlabelÚmodifierÚ
unicodeAccs      r   ÚaccidentalLabelToUnicoder1   M   sy   € õ �e�SÑ!Ô!ð ØˆÝ %Ô 9× ?Ò ?Ñ AÔ Að ð Ñˆ�*Ø�rŠ>ˆ>˜h¨%Ð/Ð/°HÀ
Ð4JÐ4Jà—M’M (¨JÑ7Ô7ˆEØˆEøà€Lr!   c           	     óª  — t          j        | ¦  «        r| | | g} t          | t          ¦  «        rÅ| d         dk    rt	          j        | ¦  «        S |                      ¦   «                              dd¦  «        } t          | ¦  «        dk    r5dddd	d
ddddœ}	 ||          } n # t          $ r t          d| › �¦  «        ‚w xY w	 t	          j        | ¦  «        S # t          $ r t          d| › �¦  «        ‚w xY wt          j        | ¦  «        r»d}| D ]}|dk     rd} nŒ|r‡t          | ¦  «        dk    r| d         | d         | d         g} t          j        t           t          t          t          f         t!          d„ | D ¦   «         ¦  «        ¦  «        }t	          j        |¦  «        S t	          j        t!          | ¦  «        ¦  «        S t          d| › �¦  «        ‚)aH  
    Convert any specification of a color to a hexadecimal color used by matplotlib.

    >>> graph.utilities.getColor('red')
    '#ff0000'
    >>> graph.utilities.getColor('r')
    '#ff0000'
    >>> graph.utilities.getColor('Steel Blue')
    '#4682b4'
    >>> graph.utilities.getColor('#f50')
    '#ff5500'
    >>> graph.utilities.getColor([0.5, 0.5, 0.5])
    '#808080'
    >>> graph.utilities.getColor(0.8)
    '#cccccc'
    >>> graph.utilities.getColor([0.8])
    '#cccccc'
    >>> graph.utilities.getColor([255, 255, 255])
    '#ffffff'

    Invalid colors raise GraphExceptions:

    >>> graph.utilities.getColor('l')
    Traceback (most recent call last):
    music21.graph.utilities.GraphException: invalid color abbreviation: l

    >>> graph.utilities.getColor('chalkywhitebutsortofgreenish')
    Traceback (most recent call last):
    music21.graph.utilities.GraphException: invalid color name: chalkywhitebutsortofgreenish

    >>> graph.utilities.getColor(True)
    Traceback (most recent call last):
    music21.graph.utilities.GraphException: invalid color specification: True
    r   r(   ú r&   é   ÚblueÚgreenÚredÚcyanÚmagentaÚyellowÚblackÚwhite)ÚbÚgÚrÚcÚmÚyÚkÚwzinvalid color abbreviation: zinvalid color name: FTc              3  ó@   K  — | ]}t          |d z  ¦  «        dz   V — ŒdS )éd   ú%N)r*   )Ú.0Úxs     r   ú	<genexpr>zgetColor.<locals>.<genexpr>¯   s2   è è € Ð=`Ð=`ÐUV½cÀ!ÀcÁ'¹l¼lÈSÑ>PÐ=`Ð=`Ð=`Ð=`Ð=`Ð=`r!   zinvalid color specification: )r   ÚisNumr)   r*   Ú	webcolorsÚnormalize_hexÚlowerr-   ÚlenÚKeyErrorr   Úname_to_hexÚ
ValueErrorÚ
isListLikeÚtÚcastÚtupleÚrgb_percent_to_hexÚ
rgb_to_hex)ÚcolorÚcolorMapÚpercentÚsubÚcolorStrLists        r   ÚgetColorr^   f   s  € õH „|�EÑÔð &Ø˜˜uÐ%ˆÝ�%�ÑÔð &6Ø�Œ8�sŠ?ˆ?õ Ô*¨5Ñ1Ô1Ð1Ø—’‘”×%Ò% c¨2Ñ.Ô.ˆåˆu‰:Œ:˜Š?ˆ?Ø#Ø$Ø"Ø#Ø&Ø%Ø$Ø$ð&ð &ˆHðMØ  œ��øÝð Mð Mð MÝ$Ð%KÀEÐ%KÐ%KÑLÔLÐLðMøøøð	AÝÔ(¨Ñ/Ô/Ð/øÝð 	Að 	Að 	AÝ Ð!?¸Ð!?Ð!?Ñ@Ô@Ð@ð	Aøøøõ 
Ô	˜5Ñ	!Ô	!ð 6ØˆØð 	ð 	ˆCØ�QŠwˆwØ�Ø�ð ð ð 	6Ý�5‰zŒz˜QŠˆØ˜qœ 5¨¤8¨U°1¬XÐ6�åœ6¥%­­Sµ#¨Ô"6½Ð=`Ð=`ÐZ_Ð=`Ñ=`Ô=`Ñ8`Ô8`ÑaÔaˆLÝÔ/°Ñ=Ô=Ð=åÔ'­¨e©¬Ñ5Ô5Ð5Ý
Ð@¸Ð@Ð@Ñ
AÔ
AÐAs   ÂB ÂB<Ã C ÃC1c                  ó   — e Zd Zd„ ZdS )ÚTestc                ó"  — |                       t          g d¢¦  «        d¦  «         |                       t          d¦  «        d¦  «         |                       t          d¦  «        d¦  «         |                       t          d¦  «        d¦  «         d S )N)ç      à?rb   rb   z#808080rb   éÿ   z#ffffffz
Steel Bluez#4682b4)ÚassertEqualr^   )Úselfs    r   Ú
testColorszTest.testColors·   s€   € Ø×Ò� / / /Ñ2Ô2°IÑ>Ô>Ð>Ø×Ò� #™œ¨	Ñ2Ô2Ð2Ø×Ò� #™œ¨	Ñ2Ô2Ð2Ø×Ò� ,Ñ/Ô/°Ñ;Ô;Ð;Ð;Ð;r!   N)r   r   r   rf   r    r!   r   r`   r`   ¶   s#   € € € € € ð<ð <ð <ð <ð <r!   r`   Ú__main__)Ú__doc__Ú
__future__r   r   r   ÚtypingrT   ÚunittestrL   Úmusic21.baser   Úmusic21r   r   r   r	   ÚEnvironmentr   r
   r   ÚMusic21Exceptionr   r$   r1   r^   ÚTestCaser`   r   ÚmainTestr    r!   r   ú<module>rr      sÜ  ððð ð #Ð "Ð "Ð "Ð "Ð "à "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à&ˆ{Ô&Ð'8Ñ9Ô9€ð �*Ð.ØVÐVÐVñXô X€ðJð Jð JðD	ð 	ð 	ð 	ð 	�\Ô2ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜,Ô7ñ 	ô 	ð 	ðð ð ð2MBð MBð MBð`<ð <ð <ð <ð <ˆ8Ôñ <ô <ð <ð ˆzÒÐà€N€N€NØ€GÔ�TÑÔÐÐÐð Ðr!   