§
    £”jai ã                   ó6  — d Z dZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ ddlT ddlmZ ddlmZmZmZmZmZm Z m!Z!m"Z" dd	l#m$Z$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 dOd„Z3dOd„Z4dOd„Z5d„ Z6 G d„ d¦  «        Z7 G d„ d¦  «        Z8 G d„ d¦  «        Z9 G d„ d¦  «        Z: G d„ de$¦  «        Z; G d„ de(¦  «        Z< G d „ d!e;¦  «        Z=d"„ Z>d#„ Z? G d$„ d%¦  «        Z@ G d&„ d'e@¦  «        ZA G d(„ d)e@e=¦  «        ZB G d*„ d+eAe=¦  «        ZC G d,„ d-¦  «        ZDd.„ ZE G d/„ d0e;¦  «        ZF G d1„ d2e@eF¦  «        ZGg d3¢ZHg d4¢ZId5„ ZJ G d6„ d7e¦  «        ZK eK¦   «         ZLd8ZM G d9„ d:eG¦  «        ZN G d;„ d<eAeF¦  «        ZO G d=„ d>¦  «        ZP G d?„ d@ePeG¦  «        ZQ G dA„ dBeO¦  «        ZR G dC„ dDeF¦  «        ZS G dE„ dFeD¦  «        ZT G dG„ dHeD¦  «        ZU G dI„ dJ¦  «        ZV G dK„ dLeSeVeG¦  «        ZW G dM„ dNeSeVeO¦  «        ZXdS )Pz3.3.0a  Collection of axes for charts.

The current collection comprises axes for charts using cartesian
coordinate systems. All axes might have tick marks and labels.
There are two dichotomies for axes: one of X and Y flavours and
another of category and value flavours.

Category axes have an ordering but no metric. They are divided
into a number of equal-sized buckets. Their tick marks or labels,
if available, go BETWEEN the buckets, and the labels are placed
below to/left of the X/Y-axis, respectively.

  Value axes have an ordering AND metric. They correspond to a nu-
  meric quantity. Value axis have a real number quantity associated
  with it. The chart tells it where to go.
  The most basic axis divides the number line into equal spaces
  and has tickmarks and labels associated with each; later we
  will add variants where you can specify the sampling
  interval.

The charts using axis tell them where the labels should be placed.

Axes of complementary X/Y flavours can be connected to each other
in various ways, i.e. with a specific reference point, like an
x/value axis to a y/value (or category) axis. In this case the
connection can be either at the top or bottom of the former or
at any absolute value (specified in points) or at some value of
the former axes in its own coordinate system.
é    )Úlog10)Ú	lru_cache)ÚisNumberÚisNumberOrNoneÚisListOfStringsOrNoneÚisListOfNumbersÚisListOfNumbersOrNoneÚisColorOrNoneÚOneOfÚ	isBooleanÚ
SequenceOfÚisStringÚEitherOrÚ	ValidatorÚNoneOrÚisNormalDateÚisNoneOrCallable)Ú*)Ú
normalDate)ÚDrawingÚLineÚPolyLineÚRectÚGroupÚSTATE_DEFAULTSÚ_textBoxLimitsÚ_rotatedBoxLimits)ÚWidgetÚTypedPropertyCollection)ÚLabelÚPMVLabelÚXLabelÚDirectDrawFlowable)ÚnextRoundNumber)Ú
ShadedRect)ÚColor)ÚisSeqNc                 ó–  — t          | d         d         ¦  «        r/|r|||fd„}n|fd„}t          t          |fd„| ¦  «        ¦  «        } t          t          t          d„ | D ¦   «         ¦  «        ¦  «        } t	          | ¦  «        dk    r|S  |t          t          || ¦  «        ¦  «        ¦  «        }|r | ||¦  «        |¦  «        n|S )Nr   c                 ó   —  || ||¦  «        S ©N© )ÚTÚxÚspecialÚfuncs       úm/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/reportlab/graphics/charts/axes.pyú<lambda>z"_findMinMaxValue.<locals>.<lambda>6   s   € °g°g¸aÀÀ$Ñ6GÔ6G€ ó    c                 ó   — | |         S r*   r+   )r,   r-   s     r0   r1   z"_findMinMaxValue.<locals>.<lambda>8   s
   € ˜A˜aœD€ r2   c                 ó<   — t          t          || ¦  «        ¦  «        S r*   )ÚlistÚmap)ÚeÚfs     r0   r1   z"_findMinMaxValue.<locals>.<lambda>9   s   € ¥¥c¨!¨A¡h¤h¡¤€ r2   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó   — g | ]}|®|‘ŒS r*   r+   ©Ú.0r-   s     r0   ú
<listcomp>z/_findMinMaxValue.<locals>.<listcomp>.<listcomp>:   s   € Ð8Ð8Ð8 ¨!¨-˜!¨-¨-¨-r2   r+   r;   s     r0   r=   z$_findMinMaxValue.<locals>.<listcomp>:   s'   € ÐDÐDÐD¸QÐ8Ð8 QÐ8Ñ8Ô8ÐDÐDÐDr2   )r'   r5   r6   ÚfilterÚlen)ÚVr-   Údefaultr/   r.   ÚextraMinMaxValuesr8   Úrs           r0   Ú_findMinMaxValuerD   3   sá   € ÝˆQˆqŒT�!ŒW�~„~ð 4Øð 	!Ø 7°ÐGÐGÐGˆAˆAàÐ Ð Ð ˆAÝ
�s˜aÐ/Ð/Ð/°Ñ2Ô2Ñ
3Ô
3ˆÝ�V•CÐDÐDÀ!ÐDÑDÔDÑEÔEÑFÔF€AÝ
ˆ1�v„vˆq‚y€y˜�.Øˆ�T•#�d˜1‘+”+ÑÔÑÔ€AØ.?ÐFˆ4ˆ4��Ð&Ñ'Ô'¨Ñ*Ô*Ð*ÀQÐFr2   c                 ó6   — t          | ||t          ||¬¦  «        S )zfind minimum over V[i][x]©r.   rB   )rD   Úmin©r@   r-   rA   r.   rB   s        r0   Ú_findMinrI   ?   s   € å˜A˜a ­°GÐN_Ð`Ñ`Ô`Ð`r2   c                 ó6   — t          | ||t          ||¬¦  «        S )zfind maximum over V[i][x]rF   )rD   ÚmaxrH   s        r0   Ú_findMaxrL   C   s   € å˜A˜a ­°GÐO`ÐaÑaÔaÐar2   c                 óP   — | D ]"}	 t          |¦  «        |k    r dS Œ#  Y  dS xY wdS )ztrue if all values are intr   é   ©Úint)ÚvaluesÚvs     r0   Ú_allIntrS   G   sD   € àð ð ˆð	Ý�1‰vŒv�qŠyˆy   ˆyøð	Ø�1�1�1øøøØˆ1s   †�#c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚAxisLabelAnnotationaK  Create a grid like line using the given user value to draw the line
    v       value to use
    kwds may contain
    scaleValue  True/not given --> scale the value
                otherwise use the absolute value
    labelClass  the label class to use default Label
    all Label keywords are acceptable (including say _text)
    c                 ó"   — || _         || _        d S r*   ©Ú_vÚ_kwds©ÚselfrR   Úkwdss      r0   Ú__init__zAxisLabelAnnotation.__init__Y   ó   € ØˆŒØˆŒ
ˆ
ˆ
r2   c                 ój  — | j                              ¦   «         }|                     dt          ¦  «        }|                     dd¦  «        }t	          |d¦  «        s|                     ¦   «           |r|j        nd„ | j        ¦  «        }|j        r
|j	        }|}n	|}|j
        }||d<   ||d<    |di |¤ŽS )	NÚ
labelClassÚ
scaleValueTÚ_tickValuesc                 ó   — | S r*   r+   ©r-   s    r0   r1   z.AxisLabelAnnotation.__call__.<locals>.<lambda>c   s   € °a€ r2   r-   Úyr+   )rY   ÚcopyÚpopr    ÚhasattrÚ_pseudo_configureÚscalerX   ÚisYAxisÚ_xÚ_y)r[   Úaxisr\   r`   ra   Úsvr-   re   s           r0   Ú__call__zAxisLabelAnnotation.__call__]   sÇ   € ØŒz�ŠÑ Ô ˆØ—X’X˜l­5Ñ1Ô1ˆ
Ø—X’X˜l¨4Ñ0Ô0ˆ
Ý�t˜MÑ*Ô*ð 	%Ø×"Ò"Ñ$Ô$Ð$Ø7˜JÐ7ˆdŒjˆj¨K¨K¸¼ÑAÔAˆØŒ<ð 	Ø”ˆAØˆAˆAàˆAØ”ˆAØˆˆS‰	ØˆˆS‰	ØˆzÐ!Ð!˜DÐ!Ð!Ð!r2   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r]   rp   r+   r2   r0   rU   rU   P   s<   € € € € € ðð ðð ð ð"ð "ð "ð "ð "r2   rU   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚAxisLineAnnotationa  Create a grid like line using the given user value to draw the line
    kwds may contain
    startOffset if true v is offset from the default grid start position
    endOffset   if true v is offset from the default grid end position
    scaleValue  True/not given --> scale the value
                otherwise use the absolute value
    lo          lowest coordinate to draw default 0
    hi          highest coordinate to draw at default = length
    drawAtLimit True draw line at appropriate limit if its coordinate exceeds the lo, hi range
                False ignore if it's outside the range
    all Line keywords are acceptable
    c                 ó"   — || _         || _        d S r*   rW   rZ   s      r0   r]   zAxisLineAnnotation.__init__{   r^   r2   c                 óZ  ‡— | j                              ¦   «         }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|j        r|j        }|j        }n|j        }|j        }|                     dd ¦  «        }|                     dd ¦  «        }	|�|	€[t          t          |dd ¦  «        d	d ¦  «        }
|
rt          |
d
¦  «        r
 |
¦   «         }
|
r|€|
d         }|	€|
d         }	n|€d}|	€d}	|                     d|j        ¦  «        |z   }|                     dd¦  «        |z   }t          ||¦  «        t          ||¦  «        }}|                     dd¦  «        }|j        }|sd„ |_        	 | j        }|r||z   }n|r||z   }|                     ||z
  |	|z
  |                     dd ¦  «        ¦  «        }t          |d¦  «        s|                     ¦   «          |                     |¦  «        Š‰|k     s‰|k    r!|s
	 ||_        d S ‰|k     r|Šn|Šˆfd„|_         ||¦  «        }|                     ¦   «         D ]\  }}t!          |||¦  «         Œt          | dd¦  «        rt#          d|› d‰› d|› �¦  «         ||_        n# ||_        w xY w|S )Nra   TÚ	endOffsetFÚstartOffsetÚstartÚendÚjoinAxisÚgetGridDimsrp   r   rN   ÚhiÚloÚdrawAtLimitc                 ó   — | S r*   r+   rd   s    r0   r1   z-AxisLineAnnotation.__call__.<locals>.<lambda>œ   s   € ¨1€ r2   Úparentrb   c                 ó   •— ‰S r*   r+   )r-   Úds    €r0   r1   z-AxisLineAnnotation.__call__.<locals>.<lambda>­   s   ø€ ¨q€ r2   Ú_dbgzv=z --> d=z L=)rY   rf   rg   rk   rl   rm   Úgetattrrh   Ú_lengthrG   rK   Ú_get_line_posrX   Ú_getLineFuncri   ÚitemsÚsetattrÚprint)r[   rn   r\   ra   rz   r{   ÚoffsÚd0Úsr7   Údimr€   r�   r‚   ÚoaglprR   r/   ÚLÚkr†   s                      @r0   rp   zAxisLineAnnotation.__call__   s  ø€ ØŒz�ŠÑ Ô ˆØ—X’X˜l¨4Ñ0Ô0ˆ
Ø—H’H˜[¨Ñ/Ô/ˆ	Ø—h’h˜}¨UÑ3Ô3ˆØŒ<ð 	Ø”7ˆDØ”ˆBˆBà”7ˆDØ”ˆBØ�HŠH�W˜TÑ"Ô"ˆØ�HŠH�U˜4Ñ Ô ˆØˆ9˜˜	Ý�' $ z°$Ñ7Ô7¸ÀdÑKÔKˆCØð •w˜s :Ñ.Ô.ð Ø�c‘e”e�Øð $Ø�9 # a¤&˜aØ�9 # a¤&˜aøà�9 !˜aØ�9 !˜aØ�XŠX�d˜4œ<Ñ(Ô(¨Ñ+ˆØ�XŠX�d˜1ÑÔ˜bÑ ˆÝ�"�R‰jŒj�˜R ™œˆ2ˆØ—h’h˜}¨UÑ3Ô3ˆØÔ"ˆØð 	-Ø!, ˆDÔð	'Ø”ˆAØð Ø˜‘F��Øð Ø˜‘F�Ø×$Ò$ Q t¡V¨A¨d©F°4·8²8¸HÀTÑ3JÔ3JÑKÔKˆDÝ˜4 Ñ.Ô.ð )Ø×&Ò&Ñ(Ô(Ð(Ø×"Ò" 1Ñ%Ô%ˆAØ�Štˆt�q˜’t�tØ"Ð/¨4ð "'ˆDÔÐÐð �R’4�4Ø�A�Aà�AØ%0 [ [ [�Ô"Ø��Q‘”ˆAØ—z’z‘|”|ð ð ‘��!Ý˜˜!˜A‘”��Ý�t˜F 1Ñ%Ô%ð 0ÝÐ.˜1Ð.Ð. QÐ.Ð.¨1Ð.Ð.Ñ/Ô/Ð/à!&ˆDÔÐø ˆDÔÐ&Ð&Ð&Ð&Øˆs   ÆBJ È#A4J Ê	J(Nrq   r+   r2   r0   rw   rw   n   s<   € € € € € ðð ðð ð ð6ð 6ð 6ð 6ð 6r2   rw   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚAxisBackgroundAnnotationa  Create a set of coloured bars on the background of a chart using axis ticks as the bar borders
    colors is a set of colors to use for the background bars. A colour of None is just a skip.
    Special effects if you pass a rect or Shaded rect instead.
    c                 ó"   — || _         || _        d S r*   )Ú_colorsrY   )r[   Úcolorsr\   s      r0   r]   z!AxisBackgroundAnnotation.__init__¼   s   € ØˆŒØˆŒ
ˆ
ˆ
r2   c           
      óD  — | j         }|sd S | j                             ¦   «         }|j        }|r|j        }|j        }n|j        }|j        }|                     dd ¦  «        }|                     dd ¦  «        }|�|€[t          t          |dd ¦  «        dd ¦  «        }	|	rt          |	d¦  «        r
 |	¦   «         }	|	r|€|	d         }|€|	d         }n|€d}|€d}t          |d¦  «        s| 	                    ¦   «          t          |dd ¦  «        }
|
sd S t          ¦   «         }t          |¦  «        }|                     |
d         ¦  «        }t          dt          |
¦  «        ¦  «        D �]:}|                     |
|         ¦  «        }||dz
  |z           }|�r	|r|}|}||z
  }||z
  }n|}|}||z
  }||z
  }t          |t          ¦  «        rt!          |||||d ¬	¦  «        }nªt          |t           ¦  «        r@t!          ||||¦  «        }|j        D ]%}|d
vrt%          ||t          ||¦  «        ¦  «         Œ&nUt          |t&          ¦  «        r@t'          ||||¬
¦  «        }|j        D ]%}|d
vrt%          ||t          ||¦  «        ¦  «         Œ&|                     |¦  «         |}�Œ<|S )Nr|   r}   r~   r   rp   r   rN   rb   )Ú	fillColorÚstrokeColor)r-   re   ÚwidthÚheight)r™   rY   rf   rk   rl   rm   rg   rˆ   rh   ri   r   r?   rŠ   ÚrangeÚ
isinstancer&   r   Ú__dict__r�   r%   Úadd)r[   rn   rš   r\   rk   r�   r�   r‘   r7   r’   ÚtvÚGÚncolorsÚv0ÚiÚv1Úcre   r-   rŸ   rž   rC   r•   s                          r0   rp   z!AxisBackgroundAnnotation.__call__À   sÿ  € Ø”ˆØÐ�v�vØŒz�ŠÑ Ô ˆØ”,ˆØð 	Ø”7ˆDØ”ˆBˆBà”7ˆDØ”ˆBØ�HŠH�W˜TÑ"Ô"ˆØ�HŠH�U˜4Ñ Ô ˆØˆ9˜˜	Ý�' $ z°$Ñ7Ô7¸ÀdÑKÔKˆCØð •w˜s :Ñ.Ô.ð Ø�c‘e”e�Øð $Ø�9 # a¤&˜aØ�9 # a¤&˜aøà�9 !˜aØ�9 !˜aÝ�t˜MÑ*Ô*ð 	%Ø×"Ò"Ñ$Ô$Ð$Ý�T˜-¨Ñ-Ô-ˆØÐ�6�6Ý‰GŒGˆÝ�f‘+”+ˆØ×Ò  1¤Ñ&Ô&ˆÝ�q�˜R™œÑ!Ô!ð 	ñ 	ˆAØ×#Ò# B q¤EÑ*Ô*ˆBØ˜˜!™˜W‘}Ô%ˆAØñ Øð 	!Ø�AØ�AØ ™U�FØ˜a™C�E�Eà�AØ�AØ˜r™E�EØ˜q™S�FÝ˜a¥Ñ&Ô&ð 6Ý˜Q˜q  v¸ÀdÐKÑKÔK�A�AÝ ¥$Ñ'Ô'ð 	6Ý˜Q˜q  vÑ.Ô.�AØœZð 6ð 6˜ØÐ$>Ð>Ð>Ý# A a­°°!©¬Ñ5Ô5Ð5øð6õ   ¥*Ñ-Ô-ð 6Ý" Q¨°¸fÐEÑEÔE�AØœZð 6ð 6˜ØÐ$>Ð>Ð>Ý# A a­°°!©¬Ñ5Ô5Ð5øØ—’�a‘”�ØˆB‰BØˆr2   Nrq   r+   r2   r0   r—   r—   ·   s<   € € € € € ðð ðð ð ð:ð :ð :ð :ð :r2   r—   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTickLUz$lookup special cases for tick valuesc                 óJ   — |                      dd¦  «        | _        || _        d S )NÚaccuracyç:Œ0âŽyE>)rg   r®   r,   )r[   r,   r\   s      r0   r]   zTickLU.__init__þ   s"   € ØŸš ¨DÑ1Ô1ˆŒØˆŒˆˆr2   c                 ó`   — | j         }| j        D ]\  }}t          ||z
  ¦  «        |k     r dS ŒdS ©NTF)r®   r,   Úabs©r[   Útr®   r-   rR   s        r0   Ú__contains__zTickLU.__contains__  sD   € Ø”=ˆØ”6ð 	ð 	‰CˆAˆaÝ�1�Q‘3‰xŒx˜Ò Ð Ø�t�tð !àˆur2   c                 óŒ   — | j         }| j        D ]$\  }}t          ||z
  ¦  «        | j         k     r|c S Œ%t          d|z  ¦  «        ‚)Nzcannot locate index %r)r®   r,   r²   Ú
IndexErrorr³   s        r0   Ú__getitem__zTickLU.__getitem__  sW   € Ø”=ˆØ”6ð 	ð 	‰CˆAˆaÝ�1�Q‘3‰xŒx˜œÒ%Ð%Ø���ð &åÐ1°AÑ5Ñ6Ô6Ð6r2   N)rr   rs   rt   ru   r]   rµ   r¸   r+   r2   r0   r¬   r¬   ü   sG   € € € € € Ø.Ð.ðð ð ðð ð ð7ð 7ð 7ð 7ð 7r2   r¬   c                   ó²   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdg i fd„Z	ddg fd	„Z
ddg fd
„Zdd„Zd„ Z ee¦  «        Zd„ Z ee¦  «        Zdd„Zd„ Zd„ ZdS )Ú_AxisGc                 óR   — |                       |¦  «        }	 |d         }n#  Y nxY w|S ©Nr   )rj   )r[   rR   s     r0   rŠ   z_AxisG._get_line_pos  s4   € Ø�JŠJ�q‰MŒMˆð	Ø�!”ˆAˆAøð	ØˆDøøøØˆs   —   $c                 óp   — |                       |¦  «        }t          || j        |z   || j        |z   ¦  «        S r*   )rŠ   r   rm   )r[   r-   r|   r}   s       r0   Ú_cxLinez_AxisG._cxLine  s5   € Ø×Ò˜qÑ!Ô!ˆÝ�A�t”w ‘¨¨4¬7°S©=Ñ9Ô9Ð9r2   c                 óp   — |                       |¦  «        }t          | j        |z   || j        |z   |¦  «        S r*   )rŠ   r   rl   )r[   re   r|   r}   s       r0   Ú_cyLinez_AxisG._cyLine  s5   € Ø×Ò˜qÑ!Ô!ˆÝ�D”G˜e‘O Q¨¬°#©°qÑ9Ô9Ð9r2   c           	      óØ   — |                       |¦  «        }| j        |z   }| j        |z   }t          ||¦  «        t          ||¦  «        }}||z   }t	          |||||z   |||z   gd¬¦  «        S ©NrN   )ÚstrokeLineJoin)rŠ   rm   rG   rK   r   )	r[   r-   r|   r}   Ú_3d_dxÚ_3d_dyÚy0Úy1Úx1s	            r0   Ú	_cxLine3dz_AxisG._cxLine3d  su   € Ø×Ò˜qÑ!Ô!ˆØŒW�u‰_ˆØŒW�s‰]ˆÝ�R˜‘”�C  2™JœJˆBˆØ�‰ZˆÝ˜˜2˜b  F¡¨2¨b°©iÐ8ÈÐJÑJÔJÐJr2   c                 óØ   — |                       |¦  «        }| j        |z   }| j        |z   }t          ||¦  «        t          ||¦  «        }}||z   }t	          ||||z   |||z   |gd¬¦  «        S rÂ   )rŠ   rl   rG   rK   r   )	r[   re   r|   r}   rÄ   rÅ   Úx0rÈ   rÇ   s	            r0   Ú	_cyLine3dz_AxisG._cyLine3d'  su   € Ø×Ò˜qÑ!Ô!ˆØŒW�u‰_ˆØŒW�s‰]ˆÝ�R˜‘”�C  2™JœJˆBˆØ�‰ZˆÝ˜˜A˜b ™i¨¨2¨f©9°RÐ8ÈÐJÑJÔJÐJr2   Nc                 ó¾   — t          |dd ¦  «        }|�/t          |dd ¦  «        }| j        r| j        p| j        }|||||fd„S | j        r| j        p| j        }|||fd„S )NrÄ   rÅ   c                 ó"   —  || ||||¬¦  «        S )N)rÄ   rÅ   r+   )rR   r‘   r7   r8   rÄ   rÅ   s         r0   r1   z%_AxisG._getLineFunc.<locals>.<lambda>4  s    € ÈaÈaÐPQÐRSÐTUÐ]cÐkqÐNrÑNrÔNr€ r2   c                 ó   —  || ||¦  «        S r*   r+   )rR   r‘   r7   r8   s       r0   r1   z%_AxisG._getLineFunc.<locals>.<lambda>7  s   € °!°!°A°a¸±(´(€ r2   )rˆ   rk   rÌ   rÉ   rÀ   r¾   )r[   r|   r}   r„   rÄ   rÅ   r8   s          r0   r‹   z_AxisG._getLineFunc/  s~   € Ý˜ ¨Ñ.Ô.ˆØÐÝ˜V H¨TÑ2Ô2ˆFØ”Ð/ ¤ÐA°4´>ˆAØ$¨¨q¸ÀfÐrÐrÐrÐrà”Ð- ¤Ð=°´ˆAØ$¨¨qÐ:Ð:Ð:Ð:r2   c                 óØ  ‡— |                       |||
¦  «        }t          | d¦  «        s|                      ¦   «          ‰r| j        rˆfd„pˆfd„}nd }| j        D ]�} ||¦  «        }|r ||¦  «        rŒ||_        ||_        ||_        ||_        ||_	        |	|_
        ||v r1||                              ¦   «         D ]\  }}t          |||¦  «         Œ|                     |¦  «         Œ�d S )Nrb   c                 ó   •— | j         ‰v S r*   )rÇ   ©ÚlÚexcludes    €r0   r1   z#_AxisG._makeLines.<locals>.<lambda>>  s   ø€ ¨a¬d°g¨o€ r2   c                 ó   •— | j         ‰v S r*   )rÈ   rÒ   s    €r0   r1   z#_AxisG._makeLines.<locals>.<lambda>>  s   ø€ ÈQÌTÐU\È_€ r2   )r‹   rh   ri   rk   rb   r�   ÚstrokeWidthÚstrokeDashArrayrÃ   ÚstrokeLineCapÚstrokeMiterLimitrŒ   r�   r£   )r[   Úgr|   r}   r�   rÖ   r×   rÃ   rØ   rÙ   r„   rÔ   Úspecialsr/   Úexfr´   r”   ÚarR   s              `       r0   Ú
_makeLinesz_AxisG._makeLines9  s+  ø€ Ø× Ò   s¨6Ñ2Ô2ˆÝ�t˜MÑ*Ô*ð 	%Ø×"Ò"Ñ$Ô$Ð$Øð 	Ø”,Ð>Ð$=Ð$=Ð$=Ð$=Ð]ÐC\ÐC\ÐC\ÐC\ˆCˆCàˆCØÔ!ð 	ð 	ˆAØ�D˜‘G”G�ØÐ+˜3˜3˜q™6œ6Ð+ 8Ø +�”Ø +�”Ø$3�Ô!Ø#1�Ô Ø"/�”Ø%5�Ô"Ø˜�=�=Ø'¨œ{×0Ò0Ñ2Ô2ð 'ð '™˜˜!Ý  ! A™œ˜˜Ø—’�a‘”��ð	ð 	r2   c                 óÐ  — | j         }| j        pd}|rº|r¸| j        r±| j        }| j        }|�|€;|rt          |d¦  «        r
 |¦   «         }|r|€|d         }|€|d         }n|€d}|€d}|s|r`| j        r| j        }	n| j        }	|  	                    |||	z
  ||	z
  ||| j
        | j        | j        | j        ||t          | di ¦  «        ¬¦  «         |                      |||g ¬¦  «         dS )ú)this is only called by a container objectr   Nrp   rN   Ú_gridSpecials)r„   rÔ   rÛ   )rÔ   )ÚgridStrokeColorÚgridStrokeWidthÚvisibleGridÚ	gridStartÚgridEndrh   rk   rl   rm   rÞ   ÚgridStrokeDashArrayÚgridStrokeLineJoinÚgridStrokeLineCapÚgridStrokeMiterLimitrˆ   Ú_makeSubGrid)
r[   rÚ   r’   r„   rÔ   rª   Úwr‘   r7   r�   s
             r0   ÚmakeGridz_AxisG.makeGridO  ss  € àÔ ˆØÔ Ð% AˆØð 	_�ð 	_�tÔ'ð 	_Ø”ˆAØ”ˆAØˆy˜A˜IØð  �7 3 zÑ2Ô2ð  Ø˜#™%œ%�CØð (Ø�y c¨!¤f !Ø�y c¨!¤f !øà�y a !Ø�y a !Øð _�Að _Ø”<ð %¨¬  Ø!œW�dØ—’  ! D¡&¨¨4©°°!°DÔ4LÈTÔMdÐeiÔe{ð  }Aô  }Vð  ^dð  mtõ  ~Eð  FJð  KZð  []ñ  ~^ô  ~^�ñ  _ô  _ð  _Ø×Ò˜!˜C ¨rÐÑ2Ô2Ð2Ð2Ð2r2   c                 ó  — t          | dd¦  «        r| j        dk    sdS | j        }| j        pd}|r|sdS | j        }| j        }|�|€;|rt          |d¦  «        r
 |¦   «         }|r|€|d         }|€|d         }n|€d}|€d}|s|rz| j        r| j        }	n| j	        }	|  
                    ¦   «         }
	 |                      |||	z
  ||	z
  ||| j        | j        | j        | j        ||¬¦  «         |
| _        dS # |
| _        w xY wdS )rà   ÚvisibleSubGridr   Nrp   rN   )r„   rÔ   )rˆ   Ú
subTickNumÚsubGridStrokeColorÚsubGridStrokeWidthÚsubGridStartÚ
subGridEndrh   rk   rl   rm   Ú_calcSubTicksrÞ   ÚsubGridStrokeDashArrayÚsubGridStrokeLineJoinÚsubGridStrokeLineCapÚsubGridStrokeMiterLimitrb   )r[   rÚ   r’   r„   rÔ   rª   rì   r‘   r7   r�   Úotvs              r0   rë   z_AxisG._makeSubGride  s‚  € å˜Ð-¨aÑ0Ô0ÐO°T´_ÀQÒ5FÐ5FÈÈØÔ#ˆØÔ#Ð( qˆØÐ�QÐ˜˜ØÔˆØŒOˆØˆ9˜˜	Øð •w˜s :Ñ.Ô.ð Ø�c‘e”e�Øð $Ø�9 # a¤&˜aØ�9 # a¤&˜aøà�9 !˜aØ�9 !˜aØð 	'�ð 	'ØŒ|ð ! D¤G˜T˜TØœ�$Ø×$Ò$Ñ&Ô&ˆCð'Ø—’  ! D¡&¨¨4©°°!°DÔ4OÐPTÔPjÐkoô  lEð  FJô  Fbð  jpð  y@�ñ  Aô  Að  Aà#&�Ô Ð Ð ø 3�Ô Ð&Ð&Ð&Ð&ð	'ð 	's   Â1:C4 Ã4	C=c                 óX   — |€| j         | j        f| j                 }|€
|| j        z   }||fS r*   )rl   rm   rk   r‰   )r[   r|   r}   s      r0   r   z_AxisG.getGridDims  s5   € Øˆ= 4¤7¨4¬7Ð"3°D´LÔ"A˜%Øˆ;˜e D¤LÑ0˜Ø�SˆyÐr2   c                 ó|   — t          | dd ¦  «        dk    rdS | j        j        }|d         dk    p|d d…         dk    S )NÚ
_dataIndexrN   Tr   ÚYé   ÚAdjY©rˆ   Ú	__class__rr   ©r[   Úacns     r0   rk   z_AxisG.isYAxis„  sF   € Ý�4˜ TÑ*Ô*¨AÒ-Ð-°d°dØŒnÔ%ˆØ�1Œv�sŠ{Ð-˜c " 1 "œg všoÐ-r2   c                 ó|   — t          | dd ¦  «        dk    rdS | j        j        }|d         dk    p|d d…         dk    S )Nrý   r   TÚXé   ÚNormalDateXr  r  s     r0   ÚisXAxisz_AxisG.isXAxisŠ  sG   € Ý�4˜ TÑ*Ô*¨AÒ-Ð-°d°dØŒnÔ%ˆØ�1Œv�sŠ{Ð5˜c # 2 #œh¨Ò5Ð5r2   c                 ór   — |€t          | dg ¦  «         |D ] }|                      || ¦  «        ¦  «         Œ!d S )NÚannotations)rˆ   r£   )r[   rÚ   ÚAr-   s       r0   ÚaddAnnotationsz_AxisG.addAnnotations�  sJ   € Øˆ9•g˜d =°Ñ4Ô4Ð4Øð 	ð 	ˆAØ�EŠE�!�!�D‘'”'‰NŒNˆNˆNð	ð 	r2   c                 ó  — t          | dg ¦  «        d d …         }i }dD ]S}g j        }g j        }|D ]*}t          ||d¦  «        r ||¦  «         Œ ||¦  «         Œ+|j        ||<   |j        |d d …<   ŒT|dxx         |z  cc<   |S )Nr  )ÚearlyÚ
beforeAxisÚ	afterAxisÚbeforeTicksÚ
afterTicksÚbeforeTickLabelsÚafterTickLabelsÚlater   r  )rˆ   ÚappendÚ__self__)r[   r  ÚDrR   ÚRÚPrÝ   s          r0   Ú_splitAnnotationsz_AxisG._splitAnnotations•  s·   € Ý�D˜ rÑ*Ô*¨1¨1¨1Ô-ˆØˆð*ð 	ð 	ˆAð ”	ˆAØ”	ˆAØð ð �Ý˜1˜Q˜q‘>”>ð Ø�A�a‘D”D�D�Dà�A�a‘D”D�D�DØ”:ˆAˆa‰DØ”:ˆAˆaˆaˆa‰DˆDØ	ˆ&ˆ	ˆ	Œ	�Q‰ˆ	ˆ	‰	Øˆr2   c                 ó  — t          ¦   «         }|                      ¦   «         }|                      ||d         ¦  «         | j        �r|                      ||d         ¦  «         |                     |                      ¦   «         ¦  «         |                      ||d         ¦  «         |                      ||d         ¦  «         |                     |                      ¦   «         ¦  «         |                      ||d         ¦  «         |                      ||d         ¦  «         |                     |                      ¦   «         ¦  «         |                      ||d         ¦  «         |                      ||d         ¦  «         |S )	Nr  r  r  r  r  r  r  r  )r   r  r  Úvisibler£   ÚmakeAxisÚ	makeTicksÚmakeTickLabels)r[   rÚ   r  s      r0   Údrawz_AxisG.draw§  sT  € Ý‰GŒGˆØ×"Ò"Ñ$Ô$ˆØ×Ò˜A˜a œjÑ)Ô)Ð)àŒ<ñ 		8Ø×Ò  ! L¤/Ñ2Ô2Ð2Ø�EŠE�$—-’-‘/”/Ñ"Ô"Ð"Ø×Ò  ! K¤.Ñ1Ô1Ð1Ø×Ò  ! MÔ"2Ñ3Ô3Ð3Ø�EŠE�$—.’.Ñ"Ô"Ñ#Ô#Ð#Ø×Ò  ! L¤/Ñ2Ô2Ð2Ø×Ò  !Ð$6Ô"7Ñ8Ô8Ð8Ø�EŠE�$×%Ò%Ñ'Ô'Ñ(Ô(Ð(Ø×Ò  !Ð$5Ô"6Ñ7Ô7Ð7à×Ò˜A˜a œiÑ(Ô(Ð(Øˆr2   r*   ©NN)rr   rs   rt   rŠ   r¾   rÀ   rÉ   rÌ   r‹   rÞ   rí   rë   r   rk   Úpropertyr	  r  r  r"  r+   r2   r0   rº   rº     sb  € € € € € ðð ð ð:ð :ð :ð:ð :ð :ðKð Kð KðKð Kð Kð;ð ;ð ;ð ;ð BFð  OQð  []ð ð ð ð ð, !¨°Rð 3ð 3ð 3ð 3ð, !%¨D¸ð 'ð 'ð 'ð 'ð4ð ð ð ð
.ð .ð .ð ˆh�wÑÔ€Gð6ð 6ð 6ð ˆh�wÑÔ€Gðð ð ð ð
ð ð ð$ð ð ð ð r2   rº   c                   óD   — e Zd Z ee eed¬¦  «        ¬¦  «        Zd„ ZdS )ÚCALabelz?where in the category range [0,1] the labels should be anchored©Údesc)ÚBASEÚlabelPosFracc                 óV   — t          j        | fi |¤Ž |                      d¬¦  «         d S )Nç      à?)r*  )r!   r]   Ú_setKeywords©r[   Úkws     r0   r]   zCALabel.__init__¾  sE   € ÝÔ˜$Ð$Ð$ Ð$Ð$Ð$Ø×ÒØ"ð 	ñ 	ô 	ð 	ð 	ð 	r2   N)	rr   rs   rt   ÚAttrMapr!   ÚAttrMapValuer   Ú_attrMapr]   r+   r2   r0   r&  r&  º  sN   € € € € € Øˆw˜HØ#�| HÐ3tÐuÑuÔuð
ñ 
ô 
€Hðð ð ð ð r2   r&  c                   óô  — e Zd ZdZdZ edci d eed¬¦  «        “d eed¬¦  «        “d eed	¬¦  «        “d
 eed¬¦  «        “d eed¬¦  «        “d eed¬¦  «        “d ee	d¬¦  «        “d ee
d¬¦  «        “d e eddd¦  «        d¬¦  «        “d e eddd¦  «        d¬¦  «        “d eed¬¦  «        “d eed¬¦  «        “d ee	d¬¦  «        “d  ee
d!¬¦  «        “d" e eddd¦  «        d#¬¦  «        “d$ e eddd¦  «        d%¬¦  «        “d& eed'¬¦  «        “d( eed)¬¦  «        “d* eed+¬¦  «        “d, eed-¬¦  «        “d. ed/d0¬¦  «        “d1 eed2¬¦  «        “d3 ed/d4¬¦  «        “d5 eed6¬¦  «        “d7 eed8¬¦  «        “d9 e ed:d;d<¦  «        d=¦  «        “d> e ed?d@dAdB¦  «        dC¬¦  «        “dD eedE¬¦  «        “dF eedG¬¦  «        “dH ee	dI¬¦  «        “dJ eedK¬¦  «        “dL eedM¬¦  «        “dN ed/dO¬¦  «        “dP eedQ¬¦  «        “dR eedS¬¦  «        “dT e edUdVdWdX¦  «        dY¦  «        “dZ eed[¬¦  «        “ŽZd\„ Zd]„ Zddd^„Zd_„ Zd`„ Zda„ Zdb„ Zd/S )eÚCategoryAxisz+Abstract category axis, unusable in itself.rN   r  úDisplay entire object, if true.r'  ÚvisibleAxisúDisplay axis line, if true.ÚvisibleTicksúDisplay axis ticks, if true.ÚvisibleLabelsúDisplay axis labels, if true.rä   úDisplay axis grid, if true.rÖ   úWidth of axis line and ticks.r�   úColor of axis line and ticks.r×   úDash array used for axis line.rØ   r   é   ú#Line cap 0=butt, 1=round & 2=squarerÃ   ú$Line join 0=miter, 1=round & 2=bevelrÙ   ú$miter limit control miter line joinsrã   úWidth of grid lines.râ   úColor of grid lines.rç   úDash array used for grid lines.ré   ú(Grid Line cap 0=butt, 1=round & 2=squarerè   ú)Grid Line join 0=miter, 1=round & 2=bevelrê   ú)Grid miter limit control miter line joinsrå   ú#Start of grid lines wrt axis originræ   ú!End of grid lines wrt axis originÚdrawGridLastú-if true draw gridlines after everything else.ÚlabelsNúHandle of the axis labels.ÚcategoryNameszList of category names.r~   úJoin both axes if true.ÚjoinAxisPosú*Position at which to join with other axis.ÚreverseDirectionú#If true reverse category direction.ÚstyleÚparallelÚstackedÚparallel_3dz$How common category bars are plottedÚlabelAxisModeÚhighÚlowrn   Úaxispmvú*Like joinAxisMode, but for the axis labelsÚ	tickShiftzTick shift typicallyÚtickStrokeWidthúWidth of ticks if specified.ÚtickStrokeColorúColor of ticks if specified.ÚloPadz*extra inner space before start of the axisÚhiPadz'extra inner space after end of the axisr  úlist of annotationsÚloLLenú*extra line length before start of the axisÚhiLLenú'extra line length after end of the axisÚskipGridÚnoneÚtopÚbothÚbottomú'grid lines to skip top bottom both noneÚinnerTickDrawú#Callable to replace _drawInnerTicksc                 óx  — | j         j        dk    s
J d¦   «         ‚d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        t          d         | _        t          d	         | _        t          d
         x| _        | _        t          d         x| _        | _        t          d         x| _        | _        d| _        t          d         | _        t          d	         | _        d x| _        | _        t          d
         | _        t          d         | _        t          d         | _        t7          t8          ¦  «        | _        d | _        d | _        d | _         d | _!        d| _"        d| _#        d| _$        d | _%        d| _&        d| _'        d| _(        d| _)        d| _*        d S )Nr4  z(Abstract Class CategoryAxis Instantiatedé2   éd   r   rN   Fr�   r×   rÃ   rØ   rÙ   ç      Ð?rn   rW  )+r  rr   rl   rm   r‰   Ú	_catCountr  r6  r8  r:  rä   rL  rÖ   r   r�   r×   rè   rÃ   ré   rØ   rê   rÙ   rã   râ   rç   rå   ræ   r   r&  rN  rP  r~   rR  ÚjoinAxisModerZ  rT  rV  Ú_labelTextFormatr_  rd  re  rg  ri  ©r[   s    r0   r]   zCategoryAxis.__init__ð  s¦  € ØŒ~Ô&¨Ò6Ð6Ð6Ð8bÑ6Ô6Ð6ð ˆŒØˆŒØˆŒØˆŒð ˆŒØˆÔØˆÔØˆÔØˆÔØ!ˆÔàˆÔÝ)¨-Ô8ˆÔÝ-Ð.?Ô@ˆÔå8FÐGWÔ8XÐXˆÔ $Ô"5Ý6DÀ_Ô6UÐUˆÔ Ô!3Ý<JÐK]Ô<^Ð^ˆÔ! DÔ$9Ø#ˆÔÝ-¨mÔ<ˆÔÝ#1Ð2CÔ#DˆÔ Ø(,Ð,ˆŒ˜œå,Ð-=Ô>ˆÔÝ+¨OÔ<ˆÔÝ .Ð/AÔ BˆÔå-­gÑ6Ô6ˆŒð "ˆÔØˆŒØˆÔØ ˆÔØ#ˆÔØ !ˆÔØˆŒ
ð !%ˆÔØˆŒØˆŒ
ØˆŒ
ØˆŒØˆŒˆˆr2   c                 ó~   — t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        d S r*   ©Úfloatrl   rm   r‰   ©r[   r-   re   Úlengths       r0   ÚsetPositionzCategoryAxis.setPosition&  ó-   € å˜‘(”(ˆŒÝ˜‘(”(ˆŒÝ˜V‘}”}ˆŒˆˆr2   c                 óf  ‡— t          t          t          t          ‰¦  «        ¦  «        ¦  «        | _        |p-| j        | j        z
  | j        z
  t          | j        pd¦  «        z  | _	        |  
                    ¦   «          | j        dk    r'ˆfd„t          | j        ¦  «        D ¦   «         | _        d S d S )NrN   r]  c                 óH   •‡— g | ]Št          ˆfd „‰D ¦   «         ¦  «        ‘ŒS )c                 ó    •— g | ]
}|‰         ‘ŒS r+   r+   )r<   Úseriesr¨   s     €r0   r=   z5CategoryAxis.configure.<locals>.<listcomp>.<listcomp>1  s   ø€ ÐBÐBÐB¨F˜f QœiÐBÐBÐBr2   )Úsum)r<   r¨   ÚmultiSeriess    @€r0   r=   z*CategoryAxis.configure.<locals>.<listcomp>1  s7   øø€ ÐcÐcÐcÈ�ÐBÐBÐBÐB°kÐBÑBÔBÑCÔCÐcÐcÐcr2   )rK   r5   r6   r?   rw  r‰   rd  re  r}  Ú	_barWidthÚ_calcTickmarkPositionsrZ  r    Ú_pmv)r[   r‡  ÚbarWidths    ` r0   Ú	configurezCategoryAxis.configure,  sª   ø€ Ý�T¥#¥c¨+Ñ"6Ô"6Ñ7Ô7Ñ8Ô8ˆŒØ!Ðf t¤|°D´JÑ'>¸t¼zÑ'IÍ5ÐQUÔQ_ÐQdÐcdÑKeÔKeÑ&eˆŒØ×#Ò#Ñ%Ô%Ð%ØÔ Ò*Ð*ØcÐcÐcÐcÍUÐSWÔSaÑMbÔMbÐcÑcÔcˆDŒIˆIˆIð +Ð*r2   c                 ó   — | j         }| j        r d„ t          |¦  «        D ¦   «         | _        d S | j        r$t          t          d|¦  «        ¦  «        | _        d S t          t          |dz   ¦  «        ¦  «        | _        d S )Nc                 ó   — g | ]}|d z   ‘ŒS )r,  r+   )r<   r´   s     r0   r=   z7CategoryAxis._calcTickmarkPositions.<locals>.<listcomp>6  s   € Ð8Ð8Ð8¨!  #¡Ð8Ð8Ð8r2   éÿÿÿÿrN   )rw  r_  r    rb   rT  r5   )r[   Úns     r0   r‰  z#CategoryAxis._calcTickmarkPositions3  s~   € ØŒNˆØŒ>ð 	4Ø8Ð8­u°Q©x¬xÐ8Ñ8Ô8ˆDÔÐÐàÔ$ð 4Ý#'­¨b°©¬Ñ#4Ô#4�Ô Ð Ð å#'­¨a°©c©
¬
Ñ#3Ô#3�Ô Ð Ð r2   c                 ó.   — | j         r| j        |z
  dz
  }|S ©NrN   )rT  rw  ©r[   Úidxs     r0   Ú_scalezCategoryAxis._scale=  s    € ØÔ Ð<¨¬°sÑ(:¸1Ñ(< #Øˆ
r2   c                 ó:   — |                       |¦  «        | j        fS )z/Returns the position and width in drawing units©ÚloScalerˆ  r“  s     r0   rj   zCategoryAxis.scaleA  s   € à—’˜SÑ!Ô! 4¤>Ð2Ð2r2   c                 óB   — |                       |¦  «        d| j        z  z   S )z-Returns the bar mid position in drawing unitsr,  r—  r“  s     r0   ÚmidScalezCategoryAxis.midScaleE  s    € à�|Š|˜CÑ Ô  3 t¤~Ñ#5Ñ5Ð5r2   r+   r*   )rr   rs   rt   ru   Ú_nodocr0  r1  r   r   r
   r	   r   r   r   r   r2  r]   r€  rŒ  r‰  r•  rj   rš  r+   r2   r0   r4  r4  Å  s>  € € € € € Ø1Ð1Ø€FØˆwð &
ð &
ð &
Ø�,˜yÐ/PÐQÑQÔQÐQð&
à"�l 9Ð3PÐQÑQÔQÐQð&
ð $�| IÐ4RÐSÑSÔSÐSð&
ð %˜ YÐ5TÐUÑUÔUÐUð	&
ð
 #�l 9Ð3PÐQÑQÔQÐQð&
ð #�l 8Ð2QÐRÑRÔRÐRð&
ð #�l =Ð7VÐWÑWÔWÐWð&
ð '˜,Ð'<ÐCcÐdÑdÔdÐdð&
ð %˜ U U¨1¨Q¨q¡\¤\Ð7\Ð]Ñ]Ô]Ð]ð&
ð &˜ e e¨A¨a°¡l¤lÐ8^Ð_Ñ_Ô_Ð_ð&
ð (˜<¨Ð6\Ð]Ñ]Ô]Ð]ð&
ð '˜, xÐ6LÐMÑMÔMÐMð&
ð '˜, }Ð;QÐRÑRÔRÐRð&
ð +˜lÐ+@ÐGhÐiÑiÔiÐið&
ð )˜L¨¨¨q°°1©¬Ð;eÐfÑfÔfÐfð&
ð  *˜\¨%¨%°°!°A©,¬,Ð<gÐhÑhÔhÐhð!&
ð"  ,˜|¨HÐ:eÐfÑfÔfÐfð#&
ð$ !�L Ð6[Ð\Ñ\Ô\Ð\ð%&
ð& �,˜~Ð4WÐXÑXÔXÐXð'&
ð( $�| IÐ4cÐdÑdÔdÐdð)&
ð* �˜dÐ)EÐFÑFÔFÐFð+&
ð, %˜Ð%:ÐAZÐ[Ñ[Ô[Ð[ð-&
ð.  �< Ð+DÐEÑEÔEÐEð/&
ð0 #�l >Ð8dÐeÑeÔeÐeð1&
ð2 (˜<¨	Ð8]Ð^Ñ^Ô^Ð^ð3&
ð4 �˜U˜U :¨i¸ÑFÔFÐGmÑnÔnÐnð5&
ð6 %˜ U U¨6°%¸À	Ñ%JÔ%JÐQ}Ð~Ñ~Ô~Ð~ð7&
ð8 !�L Ð1GÐHÑHÔHÐHð9&
ð: '˜, ~Ð<ZÐ[Ñ[Ô[Ð[ð;&
ð< '˜, }Ð;YÐZÑZÔZÐZð=&
ð> �˜XÐ,XÐYÑYÔYÐYð?&
ð@ �˜XÐ,UÐVÑVÔVÐVðA&
ðB #�l 4Ð-BÐCÑCÔCÐCðC&
ðD �˜hÐ-YÐZÑZÔZÐZðE&
ðF �˜hÐ-VÐWÑWÔWÐWðG&
ðH  �<   f¨U°6¸(Ñ CÔ CÐDmÑnÔnÐnðI&
ðJ %˜Ð%5Ð<aÐbÑbÔbÐbðK&
€HðP4ð 4ð 4ðl%ð %ð %ðdð dð dð dð4ð 4ð 4ðð ð ð3ð 3ð 3ð6ð 6ð 6ð 6ð 6r2   r4  c                 óB   — | j         sJ d| j        j        z  ¦   «         ‚d S )Nz/Cannot connect to other axes (%s), but Y- ones.)rk   r  rr   ©rn   s    r0   Ú_assertYAxisrž  I  ó)   € ØŒ<ÐdÐdÐJÈTÌ^ÔMdÑdÑdÔdÐdÐdÐdr2   c                 óB   — | j         sJ d| j        j        z  ¦   «         ‚d S )Nz/Cannot connect to other axes (%s), but X- ones.)r	  r  rr   r�  s    r0   Ú_assertXAxisr¡  K  rŸ  r2   c                   ó`   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zd„ Zd
d„Zd„ Z	d„ Z
d
d	„ZdS )Ú_XTicksr   c                 ó.   — t          | d| j        ¦  «        S )Nr`  )rˆ   rÖ   rz  s    r0   ÚactualTickStrokeWidthz_XTicks.actualTickStrokeWidthQ  ó   € å�tÐ-¨dÔ.>Ñ?Ô?Ð?r2   c                 ó.   — t          | d| j        ¦  «        S )Nrb  )rˆ   r�   rz  s    r0   ÚactualTickStrokeColorz_XTicks.actualTickStrokeColorU  r¦  r2   c                 ó  — t          | dd ¦  «        }|r || |||¦  «         d S |s|r\| j        }| j        }|r|r|s||z  }n	|r|s||z  }|                      ||| | j        || j        | j        | j        | j        ¦	  «	         d S d S )Nrq  )	rˆ   r¥  Ú_tickTweaksrÞ   r¨  r×   rÃ   rØ   rÙ   )r[   ÚtUÚtDrÚ   ÚitdÚsWÚtWs          r0   Ú_drawTicksInnerz_XTicks._drawTicksInnerY  sò   € Ý�d˜?¨4Ñ0Ô0ˆØð 
	VØˆC��R˜˜1ÑÔÐÐÐØð 	V�2ð 	VØÔ+ˆBØÔ!ˆBØð Øð ˜bð Ø˜B™�B�BØð  ð Ø˜B™�BØ�OŠO˜A˜b "  TÔ%?ÀÀ4ÔCWÐX\ÔXkÐlpÔl~ð  @Dô  @Uñ  Vô  Vð  Vð  Vð  Vð	Vð 	Vr2   Nc                 ób   — |pt          ¦   «         }| j        r|                      |||¦  «         |S r*   )r   r8  r°  )r[   r«  r¬  rÚ   s       r0   Ú
_drawTicksz_XTicks._drawTicksg  s7   € ØˆL•‘”ˆØÔð 	*Ø× Ò   B qÑ)Ô)Ð)Øˆr2   c                 óÚ   — t          | dd¦  «        rW| j        dk    rN|                      ¦   «         }	 d| _        |                      |||¦  «         | `|| _        d S # | `|| _        w xY wd S d S )NÚvisibleSubTicksr   rN   )rˆ   rð   rõ   Ú_subTickingr°  rb   )r[   r«  r¬  rÚ   rú   s        r0   Ú_drawSubTicksz_XTicks._drawSubTicksm  sš   € Ý�4Ð)¨!Ñ,Ô,ð 	'°´ÀÒ1BÐ1BØ×$Ò$Ñ&Ô&ˆCð'Ø#$�Ô Ø×$Ò$ R¨¨1Ñ-Ô-Ð-àÐ$Ø#&�Ô Ð Ð øð Ð$Ø#&�Ô Ð&Ð&Ð&Ð&ð	'ð 	'Ð1BÐ1Bs   ²A ÁA&c                 ó8  — | j         }	 |                      t          | dd¦  «        ¦  «        | _         |                      | j        | j        ¦  «        }|                      t          | dd¦  «        t          | dd¦  «        |¦  «         ||| _         S # || _         w xY w©NÚtickAxisModern   Ú	subTickHir   Ú	subTickLo)rm   Ú_labelAxisPosrˆ   r²  ÚtickUpÚtickDownr¶  )r[   ÚyoldrÚ   s      r0   r   z_XTicks.makeTicksw  s“   € ØŒWˆð	Ø×(Ò(­°°nÀVÑ)LÔ)LÑMÔMˆDŒGØ—’ ¤¨D¬MÑ:Ô:ˆAØ×Ò�w t¨K¸Ñ:Ô:½7À4ÈÐTUÑ;VÔ;VÐWXÑYÔYÐYØàˆDŒGˆGø�dˆDŒGˆNˆNˆNˆNó   ‰A?B Â	Bc                 óx   — | j         }|r+|p| j        }|dk    r|j        S |dk    r|j        |j        z   S | j        S ©Nr\  r[  )r~   rZ  rm   r‰   ©r[   Úmodern   s      r0   r¼  z_XTicks._labelAxisPos�  óM   € ØŒ}ˆØð 	.ØÐ-˜4Ô-ˆDØ�uŠ}ˆ}Ø”w�Ø˜’�Ø”w ¤Ñ-Ð-ØŒwˆr2   r*   )rr   rs   rt   rª  r$  r¥  r¨  r°  r²  r¶  r   r¼  r+   r2   r0   r£  r£  N  s«   € € € € € Ø€Kàð@ð @ñ „Xð@ð ð@ð @ñ „Xð@ðVð Vð Vðð ð ð ð'ð 'ð 'ðð ð ðð ð ð ð ð r2   r£  c                   ó   — e Zd Zdd„Zd„ ZdS )Ú_YTicksNc                 óx   — | j         }|r+|p| j        }|dk    r|j        S |dk    r|j        |j        z   S | j        S rÂ  )r~   rZ  rl   r‰   rÃ  s      r0   r¼  z_YTicks._labelAxisPos�  rÅ  r2   c                 ó8  — | j         }	 |                      t          | dd¦  «        ¦  «        | _         |                      | j        | j        ¦  «        }|                      t          | dd¦  «        t          | dd¦  «        |¦  «         ||| _         S # || _         w xY wr¸  )rl   r¼  rˆ   r²  Ú	tickRightÚtickLeftr¶  )r[   ÚxoldrÚ   s      r0   r   z_YTicks.makeTicks—  s“   € ØŒWˆð	Ø×(Ò(­°°nÀVÑ)LÔ)LÑMÔMˆDŒGØ—’ ¤¨t¬}Ñ=Ô=ˆAØ×Ò�w t¨K¸Ñ:Ô:½7À4ÈÐTUÑ;VÔ;VÐWXÑYÔYÐYØàˆDŒGˆGø�dˆDŒGˆNˆNˆNˆNrÀ  r*   )rr   rs   rt   r¼  r   r+   r2   r0   rÇ  rÇ  ‹  s7   € € € € € ðð ð ð ðð ð ð ð r2   rÇ  c                   ó¼   — e Zd ZdZ ee eed¬¦  «         eed¬¦  «         e eddddd	¦  «        d
¬¦  «        ¬¦  «        Z	dZ
d„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd	S )ÚXCategoryAxiszX/category axisúTick length up the axis.r'  úTick length down the axis.ro  rm  ÚvalueÚpointsNúIMode used for connecting axis ('bottom', 'top', 'value', 'points', None).)r)  r½  r¾  rx  r   c                 ó†   — t                                | ¦  «         d| j        _        d| j        _        d| _        d| _        d S )Nr�  éûÿÿÿr   é   )r4  r]   rN  Ú	boxAnchorÚdyr½  r¾  rz  s    r0   r]   zXCategoryAxis.__init__¯  s=   € Ý×Ò˜dÑ#Ô#Ð#Ø #ˆŒÔØˆŒŒð ˆŒØˆŒˆˆr2   c                 ó  — |                       ddd¦  «         |                      dg¦  «         g d¢| _        d| j        _        d| j        d         _        d	| j        d         _        t          d
d¦  «        }|                     | ¦  «         |S )Né   éF   éŒ   ©é
   é   rÚ  é(   rt  )ÚOneÚTwoÚThreeÚFourÚFiver�  r7   rÿ   éZ   éÈ   ru  ©r€  rŒ  rP  rN  r×  Úangler   r£   ©r[   r†   s     r0   ÚdemozXCategoryAxis.demo¸  s‡   € Ø×Ò˜˜R Ñ%Ô%Ð%Ø�ŠÐ(Ð)Ñ*Ô*Ð*à@Ð@Ð@ˆÔà #ˆŒÔØ#&ˆŒ�AŒÔ Ø!ˆŒ�AŒÔå�C˜ÑÔˆØ	�Šˆd‰ŒˆØˆr2   c                 óæ   — t          |¦  «         |dk    r|j        | _        dS |dk    r|j        |j        z   | _        dS |dk    r|                     |¦  «        | _        dS |dk    r	|| _        dS dS )ú!Join with y-axis using some mode.ro  rm  rÑ  rÒ  N©rž  rm   r‰   rj   ©r[   ÚyAxisrÄ  Úposs       r0   Ú
joinToAxiszXCategoryAxis.joinToAxisÆ  sƒ   € å�UÑÔÐØ�8ÒÐØ”hˆDŒGˆGˆGØ�UŠ]ˆ]Ø”h ¤Ñ.ˆDŒGˆGˆGØ�WŠ_ˆ_Ø—k’k #Ñ&Ô&ˆDŒGˆGˆGØ�XÒÐØˆDŒGˆGˆGð Ðr2   c                 óª   — | j         }|rG| j        }|dv r|                      ||¬¦  «         d S |dv r!|                      ||| j        ¬¦  «         d S d S d S )N©ro  rm  ©rÄ  ©rÑ  rÒ  ©rÄ  rñ  ©r~   rx  rò  rR  ©r[   ÚjaÚjams      r0   Ú_joinToAxiszXCategoryAxis._joinToAxisÒ  óƒ   € ØŒ]ˆØð 	DØÔ#ˆCØÐ'Ð'Ð'Ø—’ ¨�Ñ-Ô-Ð-Ð-Ð-ØÐ+Ð+Ð+Ø—’ ¨°$Ô2B�ÑCÔCÐCÐCÐCð	Dð 	Dð ,Ð+r2   c                 ó\   — | j         | j        z   |                      |¦  «        | j        z  z   S )z'returns the x position in drawing units)rl   rd  r•  rˆ  r“  s     r0   r˜  zXCategoryAxis.loScaleÛ  s)   € àŒw˜œÑ# d§k¢k°#Ñ&6Ô&6°t´~Ñ&EÑEÐEr2   c                 óJ  — t          ¦   «         }|                      ¦   «          | j        s|S t          | j        | j        z
  | j        | j        | j        z   | j        z   | j        ¦  «        }| j	        |_	        | j
        |_
        | j        |_        |                     |¦  «         |S r*   ©r   rü  r6  r   rl   rg  rm   r‰   ri  r�   rÖ   r×   r£   ©r[   rÚ   rn   s      r0   r  zXCategoryAxis.makeAxisß  ó‘   € Ý‰GŒGˆØ×ÒÑÔÐØÔÐ)¨ å�D”G˜DœKÑ'¨¬°$´'¸D¼LÑ2HÈÌÑ2TÐVZÔV]Ñ^Ô^ˆØÔ+ˆÔØÔ+ˆÔØ#Ô3ˆÔØ	�Šˆd‰Œˆàˆr2   c                 ó’  — t          ¦   «         }| j        s|S | j        }|��%| j        }t	          |¦  «        }| j        }| j        }|                      ¦   «         }| j        }| j	        dk    r| j
        nd }	t          |¦  «        D ]Â}
|r	||
z
  dz
  }n|
}||k    rŒ|
|z
  }|| j        v r| j        |         }n| j        |
         }|	r"|j        }|	|         x}|_
        |dk     r|dz  }nd}|j        }||
|z   |z  z   }|                     |||z   ¦  «         |                     ||         pd¦  «         |                     |¦  «         ŒÃ|S ©Nr]  rN   r   éþÿÿÿÚ )r   r:  rP  rw  r?   rT  rˆ  r¼  rl   rZ  rŠ  r    rN  rØ  r*  Ú	setOriginÚsetTextr£   )r[   rÚ   rP  ÚcatCountr�  rT  r‹  rm   rl   Úpmvr¨   ÚicÚlabelÚ_dyrR   Úlpfr-   s                    r0   r!  zXCategoryAxis.makeTickLabelsì  s  € Ý‰GŒGˆàÔ!Ð+¨! 8àÔ*ˆØÑ$Ø”~ˆHÝ�MÑ"Ô"ˆAØ#Ô4ÐØ”~ˆHØ×#Ò#Ñ%Ô%ˆBØ”ˆBØ#Ô1°9Ò<Ð<�$”)�)À$ˆCå˜8‘_”_ð ð �Ø#ð ¨(°1©*°Q©, R RØ�bØ�q’5�5˜(Ø˜‘j�Ø˜DœKÐ'Ð'Ø œK¨Ô.�E�Eà œK¨œN�EØð Øœ(�CØ%(¨¤WÐ,�A˜œ
Ø˜’s�s˜C 2™I˜Cøà�CØÔ(�Ø˜!˜C™% 8Ñ+Ñ+�Ø—’  " S¡&Ñ)Ô)Ð)Ø—’˜m¨BÔ/Ð5°2Ñ6Ô6Ð6Ø—’�e‘”��àˆr2   ©ro  N©rr   rs   rt   ru   r0  r4  r1  r   r   r2  rý   r]   rë  rò  rü  r˜  r  r!  r+   r2   r0   rÎ  rÎ  ¡  s  € € € € € ØÐàˆw˜LØ�˜hØ+ð-ñ -ô -à�< Ø-ð/ñ /ô /à#�| E E¨(°E¸7ÀHÈdÑ$SÔ$SØ\ð^ñ ^ô ^ð
ñ 
ô 
€Hð €Jðð ð ðð ð ð
ð 
ð 
ð 
ðDð Dð DðFð Fð Fðð ð ð$ð $ð $ð $ð $r2   rÎ  c            
       ó´   — e Zd ZdZ ee eed¬¦  «         eed¬¦  «         e ed¦  «        d¬¦  «        ¬¦  «        Z	dZ
d	„ Zd
„ Zdd„Zd„ Zd„ Zd„ Zd„ ZdS )ÚYCategoryAxiszY/category axisúTick length left of the axis.r'  úTick length right of the axis.©ÚleftÚrightrÑ  rÒ  NúIMode used for connecting axis ('left', 'right', 'value', 'points', None).)r)  rË  rÊ  rx  rN   c                 ó†   — t                                | ¦  «         d| j        _        d| j        _        d| _        d| _        d S )Nr7   rÕ  rÖ  r   )r4  r]   rN  r×  ÚdxrË  rÊ  rz  s    r0   r]   zYCategoryAxis.__init__   s=   € Ý×Ò˜dÑ#Ô#Ð#Ø #ˆŒÔØˆŒŒð ˆŒØˆŒˆˆr2   c                 ó  — |                       ddd¦  «         |                      dg¦  «         g d¢| _        d| j        _        d| j        d         _        d	| j        d         _        t          d
d¦  «        }|                     | ¦  «         |S )Nrt  rÞ  éP   )rÞ  rß  rÚ  )rá  râ  rã  r7   r‘   r@  ræ  rç  ru  rè  rê  s     r0   rë  zYCategoryAxis.demo)  s…   € Ø×Ò˜˜R Ñ$Ô$Ð$Ø�Š˜
�|Ñ$Ô$Ð$Ø2Ð2Ð2ˆÔà #ˆŒÔØ#&ˆŒ�AŒÔ Ø!ˆŒ�AŒÔå�C˜ÑÔˆØ	�Šˆd‰ŒˆØˆr2   r  Nc                 óþ   — t          |¦  «         |dk    r|j        dz  | _        dS |dk    r|j        |j        z   dz  | _        dS |dk    r|                     |¦  «        dz  | _        dS |dk    r|dz  | _        dS dS ©z!Join with x-axis using some mode.r  ç      ð?r  rÑ  rÒ  N©r¡  rl   r‰   rj   ©r[   ÚxAxisrÄ  rñ  s       r0   rò  zYCategoryAxis.joinToAxis6  s•   € õ 	�UÑÔÐØ�6Š>ˆ>Ø”h ‘nˆDŒGˆGˆGØ�WŠ_ˆ_Ø”x %¤-Ñ/°3Ñ6ˆDŒGˆGˆGØ�WŠ_ˆ_Ø—k’k #Ñ&Ô&¨Ñ,ˆDŒGˆGˆGØ�XÒÐØ˜C‘iˆDŒGˆGˆGð Ðr2   c                 óª   — | j         }|rG| j        }|dv r|                      ||¬¦  «         d S |dv r!|                      ||| j        ¬¦  «         d S d S d S ©N)r  r  rõ  rö  r÷  rø  rù  s      r0   rü  zYCategoryAxis._joinToAxisC  rý  r2   c                 óL   — | j         |                      |¦  «        | j        z  z   S )z'Returns the y position in drawing units)rm   r•  rˆ  r“  s     r0   r˜  zYCategoryAxis.loScaleL  s"   € àŒw˜Ÿš SÑ)Ô)¨$¬.Ñ8Ñ8Ð8r2   c                 óJ  — t          ¦   «         }|                      ¦   «          | j        s|S t          | j        | j        | j        z
  | j        | j        | j        z   | j        z   ¦  «        }| j	        |_	        | j
        |_
        | j        |_        |                     |¦  «         |S r*   ©r   rü  r6  r   rl   rm   rg  r‰   ri  r�   rÖ   r×   r£   r  s      r0   r  zYCategoryAxis.makeAxisP  s‘   € Ý‰GŒGˆØ×ÒÑÔÐØÔÐ)¨ å�D”G˜TœW T¤[Ñ0°$´'¸4¼7ÀTÄ\Ñ;QÐRVÔR]Ñ;]Ñ^Ô^ˆØÔ+ˆÔØÔ+ˆÔØ#Ô3ˆÔØ	�Šˆd‰Œˆàˆr2   c                 ó   — t          ¦   «         }| j        s|S | j        }|��,| j        }t	          |¦  «        }| j        }| j        }| j        }|                      ¦   «         }| j	        }	| j
        dk    r| j        nd }
t          |¦  «        D ]Â}|r	||z
  dz
  }n|}||k    rŒ||z
  }|| j        v r| j        |         }n| j        |         }|j        }|	||z   |z  z   }|
r"|j        }|
|         x}|_        |dk     r|dz  }nd}|                     ||z   |¦  «         |                     ||         pd¦  «         |                     |¦  «         ŒÃ|S r  )r   r:  rP  rw  r?   rT  rˆ  rN  r¼  rm   rZ  rŠ  r    r*  r  r  r  r£   )r[   rÚ   rP  r	  r�  rT  r‹  rN  rl   rm   r
  r¨   r  r  r  re   Ú_dxrR   s                     r0   r!  zYCategoryAxis.makeTickLabels]  s†  € Ý‰GŒGˆàÔ!Ð+¨! 8àÔ*ˆØÑ$Ø”~ˆHÝ�MÑ"Ô"ˆAØ#Ô4ÐØ”~ˆHØ”[ˆFØ×#Ò#Ñ%Ô%ˆBØ”ˆBØ#Ô1°9Ò<Ð<�$”)�)À$ˆCå˜8‘_”_ð ð �Ø#ð ¨(°1©*°Q©, R RØ�bØ�q’5�5˜(Ø˜‘j�Ø˜DœKÐ'Ð'Ø œK¨Ô.�E�Eà œK¨œN�EØÔ(�Ø˜!˜C™% 8Ñ+Ñ+�Øð Øœ(�CØ%(¨¤WÐ,�A˜œ
Ø˜’s�s˜C 2™I˜Cøà�CØ—’  3¡¨Ñ*Ô*Ð*Ø—’˜m¨BÔ/Ð5°2Ñ6Ô6Ð6Ø—’�e‘”��Øˆr2   ©r  Nr  r+   r2   r0   r  r    s  € € € € € ØÐàˆw˜LØ�< Ø0ð2ñ 2ô 2à �L Ø1ð3ñ 3ô 3à#�| E EÐ*TÑ$UÔ$UØ\ð^ñ ^ô ^ð
ñ 
ô 
€Hð €Jðð ð ðð ð ð ð  ð  ð  ðDð Dð Dð9ð 9ð 9ðð ð ð$ð $ð $ð $ð $r2   r  c                   ó   — e Zd ZdZd„ ZdS )ÚTickLabellerztAbstract base class which may be used to indicate a change
    in the call signature for callable label formats
    c                 ó   — dS )NzAbstract class instance calledr+   )r[   rn   rÑ  s      r0   rp   zTickLabeller.__call__‡  s   € Ø/Ð/r2   N©rr   rs   rt   ru   rp   r+   r2   r0   r,  r,  ƒ  s-   € € € € € ðð ð0ð 0ð 0ð 0ð 0r2   r,  c                 ó   — d| z  S )Nz%.12gr+   rd   s    r0   r1   r1   ‹  s
   €  7¨Q¡;€ r2   c                   ó
  — e Zd ZdZ ed¬i d e ee ed¦  «        f¦  «        d¬¦  «        “d eed¬¦  «        “d eed	¬¦  «        “d
 eed¬¦  «        “d eed¬¦  «        “d eed¬¦  «        “d ee	d¬¦  «        “d ee
d¬¦  «        “d eed¬¦  «        “d e eddd¦  «        d¬¦  «        “d e eddd¦  «        d¬¦  «        “d ee	d¬¦  «        “d ee	d ¬¦  «        “d! ee
d"¬¦  «        “d# eed$¬¦  «        “d% e eddd¦  «        d&¬¦  «        “d' e eddd¦  «        d(¬¦  «        “d) ee	d*¬¦  «        “d+ eed,¬¦  «        “d- eed.¬¦  «        “d/ eed0¬¦  «        “d1 ee	d2¬¦  «        “d3 ee	d4¬¦  «        “d5 ed6d7¬¦  «        “d8 e ed9d:d;¦  «        d<¬¦  «        “d= ed6d>¬¦  «        “d? ed6d@¬¦  «        “dA eedB¬¦  «        “dC eedD¬¦  «        “dE eedF¬¦  «        “dG eedH¬¦  «        “dI eedJ¬¦  «        “dK e ee ee	ddd¬L¦  «        f¦  «        dM¬¦  «        “dN e ee ee	ddd¬L¦  «        f¦  «        dO¬¦  «        “dP e e ee¦  «         eeddd¬L¦  «        f¦  «        dQ¬¦  «        “dR e edSdTdUdV¦  «        dW¦  «        “dX eedY¬¦  «        “dZ e ed[d\d]¦  «        d^¦  «        “d_ e edSd`dadT¦  «        db¬¦  «        “dc eedd¬¦  «        “de eedf¬¦  «        “dg eedh¬¦  «        “di e ed9d:d;¦  «        dj¬¦  «        “dk eedl¬¦  «        “dm ed6dn¬¦  «        “do ee	dp¬¦  «        “dq ee	dr¬¦  «        “ds ee	dt¬¦  «        “du ee	dv¬¦  «        “dw ee	dx¬¦  «        “dy eedz¬¦  «        “d{ eed|¬¦  «        “d} ee	d ¬¦  «        “d~ ee
d"¬¦  «        “d eed$¬¦  «        “d€ e eddd¦  «        d&¬¦  «        “d� e eddd¦  «        d(¬¦  «        “d‚ ee	d*¬¦  «        “dƒ eed,¬¦  «        “d„ eed.¬¦  «        “d… ee	d†¬¦  «        “d‡ ee	dˆ¬¦  «        “d‰ ee
dŠ¬¦  «        “d‹ ee
dŒ¬¦  «        “d� eedŽ¬¦  «        “d� e edSd�dTd‘¦  «        d’¦  «        “d“ eed”¬¦  «        “d• eed–¬¦  «        “d— eed˜¬¦  «        “ŽZd™„ Zdš„ Zd›„ Zdœ„ Z e¦   «         d�„ ¦   «         Zdž„ ZdŸ„ Zd „ Zd¡„ Zd¢„ Zd£„ Zd¤„ Zd¥„ Zd¦„ Zd§„ Z d¨„ Z!d©„ Z"dª„ Z#d«„ Z$d6S )­Ú	ValueAxisz(Abstract value axis, unusable in itself.Ú	forceZeroÚnearzEnsure zero in range if true.r'  r  r5  r6  r7  r:  r;  r8  r9  rä   r<  rÖ   r=  r�   r>  r×   r?  rØ   r   rN   r@  rA  rÃ   rB  rÙ   rC  rã   rD  râ   rE  rç   rF  ré   rG  rè   rH  rê   rI  rå   rJ  ræ   rK  rL  rM  ÚminimumTickSpacingz)Minimum value for distance between ticks.ÚmaximumTickszMaximum number of ticks.rN  NrO  rZ  r[  r\  rn   r^  ÚlabelTextFormatz3Formatting string or function used for axis labels.ÚlabelTextPostFormatzExtra Formatting string.ÚlabelTextScalezScaling for label tick values.ÚvalueMinzMinimum value on axis.ÚvalueMaxzMaximum value on axis.Ú	valueStepzStep size used between ticks.Ú
valueStepsz&List of step sizes used between ticks.ÚavoidBoundFrac©ÚemptyOKr�   r€   z.Fraction of interval to allow above and below.ÚavoidBoundSpacezSpace to allow above and below.Úabf_ignore_zerozMSet to True to make the avoidBoundFrac calculations treat zero as non-specialÚ
rangeRoundrl  rn  ÚceilingÚfloorzHow to round the axis limitsÚ
zrangePrefz!Zero range axis limit preference.rV  ÚnormalrX  rY  zHow values are plotted!ÚskipEndLr|   r}   zSkip high/low tick labelsÚorigShiftIPCú"Lowest label shift interval ratio.ÚorigShiftMinúMinimum amount to shift.ÚorigShiftSpecialValuezspecial value for shiftr¹  z$Like joinAxisMode, but for the ticksrT  rU  r  rf  rg  rh  ri  rj  rð   zNumber of axis sub ticks, if >0r»  zsub tick down or leftrº  zsub tick up or rightr´  z Display axis sub ticks, if true.rï   zDisplay axis sub grid, if true.rò   rñ   rö   rø   r÷   rù   ró   rô   r`  ra  ÚsubTickStrokeWidthz Width of sub ticks if specified.ÚsubTickStrokeColorz Color of sub ticks if specified.rb  rc  ÚkeepTickLabelsInsidez?Ensure tick labels do not project beyond bounds of axis if truerk  rm  ro  rp  ÚrequiredRangezMinimum required value range.rq  rr  rB   z*extra values to use in min max calculationc                 ó|  — | j         j        dk    s
J d¦   «         ‚ | j        dPi |¤Ž  | j        dPi dd“dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dt          d         “dt          d         “dt          d         “dt          d         “dt          d         “dd“dt          d         “dt          d         “dt          d         “dt          d         “dt          d         “dd “dd “d d!“d"d“d#d“d$d“d%d“d&d“d't          d         “d(t          d         “d)t          d         “d*d“d+t          d         “d,t          d         “d-d “d.d “d/t	          t
          ¦  «        “d0d“d1d2“d3d4“d5d “d6d7“d8d “d9d “d:d “d;d “d<d “d=d “d>d “d?d “d@d!“dAdB“dCd“dDdE“dFdB“dGd “dHd “dId “dJd7“dKd“dLd“dMd“dNd“dOd “Ž d| j        _        d S )QNr1  z%Abstract Class ValueAxis InstantiatedÚ_configuredr   rl   rt  rm   r‰   ru  r  rN   r6  r:  r8  rä   r2  rÖ   r�   r×   rÃ   rØ   rÙ   rã   rv  râ   rç   rè   ré   rê   rå   ræ   rL  Frï   r´  rð   r»  rº  r÷   rø   rù   rò   rñ   rö   ró   rô   rN  rO  r4  rÞ  r5  é   ry  rZ  rn   r6  r7  r8  r9  r:  r;  r=  r@  rA  rB  rl  rE  rV  rF  rG  rH  rJ  rL  r¹  rT  rg  ri  rP  rB   r+   )r  rr   r-  r   r   r    rN  ré  r.  s     r0   r]   zValueAxis.__init__Ù  s…  € ØŒ~Ô&¨Ò3Ð3Ð3Ð5\Ñ3Ô3Ð3ØˆÔÐÐ˜BÐÐÐØˆÔð R	ð R	ð R	Ø&' aðR	ð
  ˜RðR	ð  ˜RðR	ð #& #ðR	ð #$ !ðR	ð '( aðR	ð )*¨ðR	ð () qðR	ð '( aðR	ð %& AðR	ð" '( að#R	õ$ '5°]Ô&CÐ&Cð%R	õ& +9Ð9JÔ*KÐ*Kð'R	õ( +9Ð9IÔ*JÐ*Jð)R	õ* )7°Ô(GÐ(Gð+R	õ, ,:Ð:LÔ+MÐ+Mð-R	ð. +/¨$ð/R	õ0 +9¸Ô*GÐ*Gð1R	õ2 /=Ð=NÔ.OÐ.Oð3R	õ4 /=Ð=MÔ.NÐ.Nð5R	õ6 -;¸?Ô,KÐ,Kð7R	õ8 0>Ð>PÔ/QÐ/Qð9R	ð: %) Dð;R	ð< #' $ð=R	ð> (- uð?R	ð@ *+¨ðAR	ðB +,¨!ðCR	ðD &' QðER	ðF %& AðGR	ðH %& AðIR	õJ 1?Ð?OÔ0PÐ0PðKR	õL 0>¸oÔ/NÐ/NðMR	õN 3AÐASÔ2TÐ2TðOR	ðP .2¨TðQR	õR .<¸MÔ-JÐ-JðSR	õT 2@Ð@QÔ1RÐ1RðUR	ðV (, tðWR	ðX &* TðYR	õZ "9½Ñ!?Ô!?Ð!?ð[R	ð\ 01¨qð]R	ðb .0¨RðcR	ðd () qðeR	ðl ,0¨4ðmR	ðn )/¨ðoR	ðp +/¨$ðqR	ðr /3¨dðsR	ðt *.¨ðuR	ð~ $( 4ðR	ð@ $( 4ðAR	ðB %) DðCR	ðD *.¨ðER	ðF +/¨$ðGR	ðH +0¨%ðIR	ðJ &, VðKR	ðL &' QðMR	ðN !) ðOR	ðP "( ðQR	ðR (, tðSR	ðT (, tðUR	ðV 15°ðWR	ðX (. vðYR	ðZ *+¨ð[R	ð\  !˜qð]R	ð^  !˜qð_R	ð` '( aðaR	ðb +/¨$ðcR	ð R	ðf ˆŒÔÐÐr2   c                 ó~   — t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        d S r*   r|  r~  s       r0   r€  zValueAxis.setPosition1  r�  r2   c                 óX   — |                       |¦  «         |                      ¦   «          dS )a=  Let the axis configure its scale and range based on the data.

        Called after setPosition. Let it look at a list of lists of
        numbers determine the tick mark intervals.  If valueMin,
        valueMax and valueStep are configured then it
        will use them; if any of them are set to None it
        will look at the data and make some sensible decision.
        You may override this to build custom axes with
        irregular intervals.  It creates an internal
        variable self._values, which is a list of numbers
        to use in plotting.
        N)Ú	_setRangeÚ_configure_end)r[   Ú
dataSeriess     r0   rŒ  zValueAxis.configure7  s.   € ð 	�Š�zÑ"Ô"Ð"Ø×ÒÑÔÐÐÐr2   c                 ód   — |                       ¦   «          |                      ¦   «          d| _        d S r’  )r‰  Ú_calcScaleFactorrR  rz  s    r0   rW  zValueAxis._configure_endG  s4   € Ø×#Ò#Ñ%Ô%Ð%Ø×ÒÑÔÐØˆÔÐÐr2   c                 ó\   — || _         || _        |                      ¦   «         \  }}|||dz  fS )Nr¯   )Ú	_valueMinÚ	_valueMaxÚ_calcStepAndTickPositions)r[   r9  r:  r;  r,   s        r0   Ú_getValueStepAndTickszValueAxis._getValueStepAndTicksL  s6   € à!ˆŒØ!ˆŒØ×4Ò4Ñ6Ô6‰ˆ	�!Ø˜!˜Y t™^Ð+Ð+r2   c                 ó  — | j         }|dk    rz||z
  }||k     rod||z   z  }|dz  }t          ||z
  |¦  «        }t          ||z   |¦  «        }|dk    r|dk     r|dz   |z
  }d}n|dk    r|dk     r||z
  }d}|x}| _        |x}| _        ||fS )Nr   r,  ru  )rP  rG   rK   Ú
_cValueMinÚ
_cValueMax)r[   r9  r:  ÚrrrC   ÚmrÇ   Úy2s           r0   Ú_preRangeAdjustzValueAxis._preRangeAdjustS  sË   € ØÔˆØˆaŠ4ˆ4Ø˜8Ñ#ˆAØ�ŠtˆtØ˜ (Ñ*Ñ+�Ø�c‘	�Ý˜˜2™˜hÑ'Ô'�Ý˜˜2™˜hÑ'Ô'�Ø˜S’=�= R¨¢V VØ˜c™ B™�BØ�B�BØ˜q’[�[ R¨¢T TØ˜b™�BØ�BØ-/Ð/�˜4œ?Ø-/Ð/�˜4œ?Ø˜Ð Ð r2   c                 ó´	  — | j         x}}| j        x}}|€#t          || j        d| j        ¦  «        x}| _        |€#t          || j        d| j        ¦  «        x}| _        ||k    rX|dk    r=|€.|€,t          | dd¦  «        }|dk    r|}d}n2|dk     rd}|}n'd}d}n"| j         €d}nd}n|dk    rd|z  }d}nd}d|z  }t          | dd¦  «        r™t          t          |d	d¦  «        ¦  «        }d
}|||z
  z  }	|	| _
        || _        || j        z  | _        |	|fd„}
|€%t          || j        d|
| j        ¬¦  «        x}| _        |€%t          || j        d|
| j        ¬¦  «        x}| _        |                      ||¦  «        \  }}| j        }|}|}| j        }|rM|dk    r4t#          t%          |¦  «        t%          |¦  «        ¦  «        d||z
  z  k    }|r|dk     rd}n|dk    rd}| j        }t          | dd¦  «         }|o|}t)          |¦  «        s||f}t          | dd¦  «        }t)          |¦  «        s||f}|dk    o|}|r	|dv }|dv }ndx}}| j        }|}|rt)          |¦  «        s||f}t          | j        ¦  «        }|p|p|}d}|�rŠ|dk    �rƒ|dz  }d}|s|rç|                      ||¦  «        \  }}}|r||d         z  }||d         z  }ndx}}|r:||z
  |z  }t/          ||d         |z  ¦  «        }t/          ||d         |z  ¦  «        }|r	|d         } n|} ||z
  }!|d         st%          | ¦  «        |k    r| |!|z   k    r|!}d}|r	|d         } n|} ||z   }!|d         st%          | ¦  «        |k    r| |!|z
  k    r|!}d}|r†|                      ||¦  «        \  }}}|r4||d         |z
  k     r|d         |z
  }d}n||d         |z   k    }|d         }|r4||d         |z   k    r|d         |z   }d}n||d         |z
  k    }|d         }|r|dk    �°ƒ|r
|s|| _        nd| _        || _        || _        | j        }"| j        }#|#€|"�€| j        }$|                      ¦   «          | j        | j        }}|$�t%          |$|z
  ¦  «        dk     r?|"r|"| j        z  }%nd}%|#rt/          |%||z
  |#z  | j        z  ¦  «        }%| xj        |%z  c_        |                       ¦   «          dS )zÔSet minimum and maximum axis values.

        The dataSeries argument is assumed to be a list of data
        vectors. Each vector is itself a list or tuple of numbers.

        Returns a min, max tuple.
        Nr   rE  g{®Gáz„?g{®Gáz„¿ç333333ó?ç        Ú_bubblePlotr@  rv  c                 óœ   — 	 | d         }n# t           $ r t          dz  }Y nw xY w|||z  dz  z  } || |         |z   | |         |z
  ¦  «        S )Nr@  çš™™™™™¹?r,  )r·   Ú	bubbleMAx)r,   r-   r/   ÚbubbleVÚ	bubbleMaxrR   s         r0   r.   z$ValueAxis._setRange.<locals>.special”  so   € ð&Ø˜!œ�A�AøÝ!ð &ð &ð &Ý! #™�A�A�Að&øøøà˜A˜i™K¨#Ñ-Ñ-�Ø�t˜A˜aœD ™L¨¨1¬¨g©Ñ6Ô6Ð6s   ‚ ‹"¡"rF   r3  rÖ  r<  rA  Frl  ©rn  rD  ©rn  rC  rÞ  rN   r�  ç�íµ ÷Æ°>)!r9  r:  rI   rý   rB   ra  rL   rb  rˆ   r}  Ú_bubbleVÚ
_bubbleMaxr‰   Ú_bubbleRadiusrf  rB  r2  rG   r²   r=  r'   r@  r_  rK   Ú_computedValueStepr\  r]  rH  rJ  rL  Ú_calcValueStepÚ
_valueStepÚ_rangeAdjust)&r[   rX  ÚoMinr9  ÚoMaxr:  Úzrpro  Úfracrn  r.   rB  ÚcMinÚcMaxr2  ÚabfÚdo_rrÚdo_abfÚabfizÚrrnÚrrxÚabSÚdo_absÚaLÚgoÚiterr;  r,   ÚfuzzÚi0Úi1ÚsfrR   ÚurH  rJ  rL  rd  s&                                         r0   rV  zValueAxis._setRangeg  s©  € ð œ-Ð'ˆˆxØœ-Ð'ˆˆxØÐ½(À:ÈdÌoÐ^_ÐaeÔawÑ:xÔ:xÐx˜X¨¬ØÐ½(À:ÈdÌoÐ^_ÐaeÔawÑ:xÔ:xÐx˜X¨¬Ø�xÒÐØ˜Š{ˆ{Ø�< D LÝ! $ |°AÑ6Ô6�CØ˜1’u�uØ#&˜Ø#$˜˜Ø˜Qš˜Ø#$˜Ø#&˜˜à#'˜Ø#(˜˜Ø”]Ð*Ø$�H�Hà#�H�Hà˜A’:�:Ø" 8™|�HØ"�H�Hà"�HØ" 8™|�Hå�4˜ dÑ+Ô+ð 	ZÝ�h z°!°AÑ6Ô6Ñ7Ô7ˆIØˆDØ˜( 8Ñ+Ñ,ˆGØ#ˆDŒMØ'ˆDŒOØ!% d¤lÑ!2ˆDÔØ)0¸9ð 7ð 7ð 7ð 7ð ˆ|½(À:ÈdÌoÐ^_Ðhoð  CGô  CYð  ;Zñ  ;Zô  ;Zð  Z˜X¨¬Øˆ|½(À:ÈdÌoÐ^_Ðhoð  CGô  CYð  ;Zñ  ;Zô  ;Zð  Z˜X¨¬à!×1Ò1°(¸8ÑDÔDÑˆ�(à”_ˆ
àˆØˆØ”Nˆ	Øð 	.Ø˜&Ò Ð Ý¥ H¡¤­c°(©m¬mÑ<Ô<ÀÀ8ÈHÑCTÑ@UÒU�	Øð .Ø˜A’:�:¨˜x˜xØ˜a’Z�Z¨A àÔ!ˆÝ˜D ¨dÑ3Ô3Ð3ˆØ�˜ˆÝ�S‰zŒzð 	Ø�s�(ˆCÝ˜Ð.°Ñ6Ô6ˆÝ�U‰|Œ|ð 	!Ø˜5�LˆEØ˜fÒ$Ð.¨ˆØð 	ØÐ 0Ð0ˆCØÐ 2Ð2ˆCˆCàˆMˆC�#àÔ"ˆØˆØð 	Ý˜‘:”:ð Ø˜3�h�Ý�4”<Ñ Ô ˆàÐ&�fÐ& ˆØˆØñ *	)�T˜2’X‘XØ�A‰IˆDØˆBØð ˜ð Ø%)×%?Ò%?ÀÈ(Ñ%SÔ%SÑ"�	˜1˜dØð  Ø" 3 q¤6Ñ)�BØ" 3 q¤6Ñ)�B�Bà�K�B˜Øð +Ø" 8Ñ+¨RÑ/�BÝ˜R  A¤ r¡	Ñ*Ô*�BÝ˜R  A¤ r¡	Ñ*Ô*�BØð #˜A˜aœD˜˜Ø"�aØ˜‘G�Ø˜!”Hð ¥ A¡¤ t¢ °°A°d±F²°Ø �HØ�BØð #˜A˜bœE˜˜Ø"�aØ˜‘G�Ø˜!”Hð ¥ A¡¤ t¢ °°A°d±F²°Ø �HØ�Bàð )Ø%)×%?Ò%?ÀÈ(Ñ%SÔ%SÑ"�	˜1˜dØð (Ø  !¤ T¡	Ò)Ð)Ø#$ Q¤4¨	¡>˜Ø˜˜à% q¨¤t¨D¡yÒ0˜Ø#$ Q¤4˜Øð )Ø  "¤ d¡
Ò*Ð*Ø#$ R¤5¨¡?˜Ø˜˜à% q¨¤u¨T¡zÒ1˜Ø#$ R¤5˜ðU ð *	)�T˜2’X‘XðV ð 	+˜ð 	+Ø&/ˆDÔ#Ð#à&*ˆDÔ#à!ˆŒØ!ˆŒàÔ(ˆØÔ(ˆØÐ# |Ð'?Ø$(Ô$>Ð!Ø×ÒÑ!Ô!Ð!Ø!%¤°´�hˆHØ$Ð,µÐ4IÈ(Ñ4RÑ0SÔ0SÐTXÒ0XÐ0XØð Ø$ T¤_Ñ4�A�Aà�AØð MÝ˜A˜x¨Ñ0°,Ñ>¸t¼|ÑKÑLÔL�AØ�” !Ñ#�”à×ÒÑÔÐÐÐr2   c                 ó‚   — | j         | _        | j        | _        t	          | d¦  «        r| `|                      ¦   «          d S )NÚ_subTickValues)r9  r\  r:  r]  rh   r‘  rW  rz  s    r0   ri   zValueAxis._pseudo_configure  sB   € ØœˆŒØœˆŒÝ�4Ð(Ñ)Ô)ÐB¨tÐ/BØ×ÒÑÔÐÐÐr2   c                 ó   — dS )zŸOverride this if you want to alter the calculated range.

        E.g. if want a minumamum range of 30% or don't want 100%
        as the first point.
        Nr+   rz  s    r0   ry  zValueAxis._rangeAdjust  s	   € ð 	ˆr2   c                 ó   — dS )z…Override if you want to put slack at the ends of the axis
        eg if you don't want the last tick to be at the bottom etc
        Nr+   rz  s    r0   Ú_adjustAxisTickszValueAxis._adjustAxisTicks  s	   € ð 	ˆr2   c                 ób   — | j         t          | j        | j        z
  ¦  «        z  | _        | j        S ©z‡Calculate the axis' scale factor.
        This should be called only *after* the axis' range is set.
        Returns a number.
        )r‰   r}  r]  r\  Ú_scaleFactorrz  s    r0   rZ  zValueAxis._calcScaleFactor  s-   € ð
 !œL­5°´À$Ä.Ñ1PÑ+QÔ+QÑQˆÔØÔ Ð r2   c                 óþ  ‡— t          | dd ¦  «        Š‰r
| `‰| _        n|                      ¦   «          | j        Š| j        }| j        }d‰z  }| j        }t          t          |¦  «        ‰z  ¦  «        }|‰z  }|dv r|||z   k    r|dz  }n|||z
  k     r|dz  }t          t          |¦  «        ‰z  ¦  «        }|‰z  }|dv r|||z
  k     r|dz  }n|||z   k    r|dz  }‰ˆfd„t          ||dz   ¦  «        D ¦   «         fS )Nrv  r¯   rp  rN   rq  c                 ó   •— g | ]}|‰z  ‘ŒS r+   r+   )r<   r¨   r;  s     €r0   r=   z7ValueAxis._calcStepAndTickPositions.<locals>.<listcomp>:  s   ø€ Ð>Ð>Ð>¨!˜!˜I™+Ð>Ð>Ð>r2   )
rˆ   rv  rx  rw  r\  r]  rB  rP   r}  r    )	r[   r9  r:  r‹  rB  rŒ  rR   r�  r;  s	           @r0   r^  z#ValueAxis._calcStepAndTickPositions$  s?  ø€ Ý˜DÐ!5°dÑ;Ô;ˆ	Øð 	(ØÐ'Ø'ˆDŒOˆOà×ÒÑ!Ô!Ð!ØœˆIØ”>ˆØ”>ˆØ�I‰~ˆØ”_ˆ
Ý•�x‘” Ñ*Ñ+Ô+ˆØˆy‰LˆØÐ)Ð)Ð)Ø�˜$‘Šˆ  a¡ øØˆx˜‰}Š_ˆ_˜b A™g˜bÝ•�x‘” Ñ*Ñ+Ô+ˆØˆy‰LˆØÐ+Ð+Ð+Ø�˜$‘Šˆ  a¡ øØˆx˜‰}Š_ˆ_˜b A™g˜bØÐ>Ð>Ð>Ð>­u°R¸¸1¹©~¬~Ð>Ñ>Ô>Ð>Ð>r2   c                 ó6   — |                       ¦   «         d         S r’  )r^  rz  s    r0   Ú_calcTickPositionszValueAxis._calcTickPositions<  s   € Ø×-Ò-Ñ/Ô/°Ô2Ð2r2   c                 ó  — t          | d¦  «        s|                      ¦   «          | j        }t          | d¦  «        �s¾| j        j        }|d d…         dk    r
d}t
          }nd}d„ }d„ |D ¦   «         }g j        }t          | j        ¦  «        }t          |¦  «        }|d	k     r	g | _	        �nP|d	k    r|d
         |d         z
  }	nN|dk    r/t          |d
         |d         z
  |d	         |d
         z
  ¦  «        }	n|d
z  }||d
z            ||         z
  }	|	|z  }
| j        |
z   }| j        |
z
  }|d         |k    r|                     d|d         |	z
  ¦  «         |d         |k     r|                     |d         |	z   ¦  «         |	t          |d
z   ¦  «        z  }	t          |d d…         ¦  «        D ]C\  }}t!          |¦  «        D ].}| ||d
z   |	z  ¦  «        z   }||k    s||k    rŒ# ||¦  «         Œ/ŒD|j        | _	        | j	        | _        |S )Nrb   r‘  r  r  r   r¯   c                 ó   — | S r*   r+   rd   s    r0   r1   z)ValueAxis._calcSubTicks.<locals>.<lambda>J  s   €  € r2   c                 ó4   — g | ]}t          |d d¦  «        ¯|‘ŒS )Ú_doSubTicksrN   )rˆ   )r<   r¤   s     r0   r=   z+ValueAxis._calcSubTicks.<locals>.<listcomp>L  s)   € ÐCÐCÐC˜"¥w¨r°-ÀÑ'BÔ'BÐC�2ÐCÐCÐCr2   r@  rN   é   r�  )rh   ri   rb   r  rr   rP   r  rð   r?   r‘  rK   r\  r]  Úinsertr}  Ú	enumerater    r  )r[   rú   r  ÚiFuzzÚdCnvÚOTVr,   Únstr¨   Údstr‹  ÚvnÚvxr-   Újr´   s                   r0   rõ   zValueAxis._calcSubTicks?  sC  € Ý�t˜MÑ*Ô*ð 	%Ø×"Ò"Ñ$Ô$Ð$ØÔˆÝ�tÐ,Ñ-Ô-ñ "	1Ø”.Ô)ˆCØ�3�B�3Œx˜Ò&Ð&Ø�Ý��à�Ø!�z�àCÐC ÐCÑCÔCˆCØ”	ˆAÝ�d”oÑ&Ô&ˆCÝ�C‘”ˆAØ�ŠsˆsØ&(�Ô#Ñ#à�a’4�4Ø˜aœ&  Q¤™-�C�CØ˜’T�TÝ˜c !œf S¨¤V™m¨C°¬F°3°q´6©MÑ:Ô:�C�Cà˜!‘G�AØ˜a ™cœ( S¨¤VÑ+�CØ˜5‘y�Ø”^ DÑ(�Ø”^ DÑ(�Ø�q”6˜"’9�9˜cŸjšj¨¨3¨q¬6°#©:Ñ6Ô6Ð6Ø�r”7˜2’:�:˜sŸzšz¨#¨b¬'°#©+Ñ6Ô6Ð6Ø•u˜S ™U‘|”|Ñ#�Ý$ S¨¨"¨¤XÑ.Ô.ð ð ‘C�A�aÝ" 3™ZœZð ð ˜Ø˜d˜d A a¡C¨¡9™oœoÑ-˜Ø˜bš5˜5 A r¢E E¨8Ø˜˜!™œ˜˜ðð '(¤j�Ô#ØÔ.ˆÔØˆ
r2   c                 ó²   — t          | dd¦  «        | _        | j        r| j        S |                      ¦   «         | _        |                      ¦   «          | j        S )zKCalculate a list of tick positions on the axis.  Returns a list of numbers.r<  N)rˆ   rb   r›  r”  rz  s    r0   r‰  z ValueAxis._calcTickmarkPositionsi  sV   € å" 4¨°TÑ:Ô:ˆÔØÔÐ4 DÔ$4Ð4Ø×2Ò2Ñ4Ô4ˆÔØ×ÒÑÔÐØÔÐr2   c                 óú   — | j         €g| j        | j        z
  }|t          t	          | j        dz
  ¦  «        t	          | j        ¦  «        | j        z  ¦  «        z  }t          |¦  «        | _	        dS | j         | _	        dS )ú8Calculate _valueStep for the axis or get from valueStep.NrN   )
r;  r]  r\  rG   r}  r5  r‰   r4  r$   rx  )r[   ÚrawRangeÚrawIntervals      r0   rw  zValueAxis._calcValueStepq  so   € àŒ>Ð!Ø”~¨¬Ñ6ˆHØ"¥S­¨tÔ/@ÀÑ/BÑ)CÔ)CÅUÈ4Ì<ÑEXÔEXÐY]ÔYpÑEpÑ%rÔ%rÑrˆKÝ-¨kÑ:Ô:ˆDŒOˆOˆOà"œnˆDŒOˆOˆOr2   c                 ó*   — t          | j        ¦  «        S r*   )rS   rb   rz  s    r0   Ú_allIntTickszValueAxis._allIntTicksz  s   € Ý�tÔ'Ñ(Ô(Ð(r2   c                 óœ  — t          ¦   «         }| j        s|S | j        }|€%| j        p|                      ¦   «         rdpt
          }nJ|t          u r|                      ¦   «         rd}n*t          |d¦  «        r|                     | j	        ¦  «         | j
        }| j        }| j        | j        g}| j        }|                      ¦   «         |d|z
  <   | j        }| j        dk    r@| j        r| j        }n| j        }| j        dk    r|g}n||| j        z   g}| j        dk    r|d= ng }t)          | j	        ¦  «        }	|	dz
  }
t+          | j	        ¦  «        D �]ü\  }}||	z
  }||v r	||         }n||         }|�rÙ|j        �rÑ|                      |¦  «        }|r|D ]}t1          ||z
  ¦  «        dk     rd } nŒ|��˜|�||z  }n|}t3          |t          ¦  «        r||z  }n~t5          |¦  «        r|t)          |¦  «        k     r	||         }nSd	}nPt          |d
¦  «        r.t3          |t6          ¦  «        r || |¦  «        }n ||¦  «        }nt9          d|z  ¦  «        ‚|r||z  }|||<    |j        |Ž  |                     |¦  «         | j        r®t3          | t@          ¦  «        r™| j        }|s@| !                    ¦   «         \  }}}}||k     r!| "                    |j#        |z   |z
  ¬¦  «        }||
k    rJ|| j        z   }| !                    ¦   «         \  }}}}||k    r!| "                    |j#        |z
  |z   ¬¦  «        }| $                    |¦  «         �Œþ|S )Nz%.0fÚ
calcPlacesrN   rl  r|   r}   r   rr  r  rp   zInvalid labelTextFormat %s)r  )%r   r:  ry  r6  r±  Ú_defaultLabelFormatterÚstrrh   r³  rb   r7  r8  rl   rm   rý   r¼  rN  rG  r	  r‰   r?   r¢  r  rj   r²   r¡   r'   r,  Ú
ValueErrorr  r  rO  Ú
XValueAxisÚ	getBoundsÚcloner  r£   )r[   rÚ   r8   ÚpostÚsclrñ  r†   rN  ÚskÚnticksÚnticks1r¨   Útickr  rR   Úskvr´   ÚtxtÚa_xrË   rÆ   rÈ   rÇ   Úa_x1s                           r0   r!  zValueAxis.makeTickLabels}  sÆ  € Ý‰GŒGˆØÔ!Ð+¨! 8àÔ!ˆØˆ9ØÔ$Ðb¨×):Ò):Ñ)<Ô)<Ð)GÀÐ)aÕKaˆAˆAØ•#ˆXˆX˜$×+Ò+Ñ-Ô-ˆX°6¨q¨qÝ�Q�|Ñ$Ô$ð 	+Ø�LŠL˜Ô)Ñ*Ô*Ð*ØÔ'ˆØÔ!ˆØŒw˜œÐ ˆØŒOˆØ×%Ò%Ñ'Ô'ˆˆAˆa‰C‰Ø”ˆØŒ=˜&Ò Ð ØŒ|ð Ø”W��à”W�ØŒ}˜gÒ%Ð%Ø�T��à˜˜DœL™Ð)�Ø”= %Ò'Ð'Ø˜1˜øàˆBå�TÔ%Ñ&Ô&ˆØ˜1‘*ˆÝ Ô 0Ñ1Ô1ð 2	!ñ 2	!‰FˆAˆdØ�f‘HˆEØ˜ˆˆØ˜uœ��à˜qœ	�Øñ ,!�U”]ñ ,!Ø—J’J˜tÑ$Ô$�Øð "Ø!ð "ð "˜Ý˜s 1™u™:œ: dš?˜?Ø $˜AØ!˜Eð +ð ‘=Ø�Ø  ™H˜˜à ˜Ý! !¥SÑ)Ô)ð K°°Q±¨3¨3Ý˜q™œð Kà�s 1™vœvš:˜:Ø"# A¤$˜C˜Cà"$˜C˜CÝ   :Ñ.Ô.ð KÝ% a­Ñ5Ô5ð 'Ø"# ! D¨¡)¤)˜C˜Cà"# ! A¡$¤$˜C˜Cå(Ð)EÈÑ)IÑJÔJÐJØÐ- 4¨#¡:˜SØ�C˜‘FØ#�E”O SÐ)Ð)Ø—M’M #Ñ&Ô&Ð&ð Ô0ð KÝ% d­JÑ7Ô7ð 
KØ"&¤'˜CØ#$ð PØ16·²Ñ1BÔ1B¡  B¨¨BØ#%¨¢8 8Ø,1¯KªK¸5¼8Àc¹>ÈBÑ;N¨KÑ,OÔ,O EØ  'šz˜zØ'*¨D¬LÑ'8 Ø16·²Ñ1BÔ1B¡  B¨¨BØ#%¨¢9 9Ø*/¯+ª+¸¼À"¹ÀTÑ9I¨+Ñ*JÔ*J EØ—E’E˜%‘L”L�Lùàˆr2   c                 ó´   — | j         s
J d¦   «         ‚|€d}| j        | j        f| j                 }| j        }| j        r| }|| j        z  }|||| j        z
  z  z   S )zvConverts a numeric value to a plotarea position.
        The chart first configures the axis, then asks it to
        ú1Axis cannot scale numbers before it is configuredNr   )rR  rl   rm   rý   r—  rT  r‰   r\  )r[   rÑ  ÚorgrŽ  s       r0   rj   zValueAxis.scaleÓ  sy   € ð ÔÐTÐTÐ!TÑTÔTÐTØˆ= !˜%ð Œw˜œÐ  ¤Ô1ˆØÔˆØÔ ð 	 Ø�ˆBØ�4”<ÑˆCØ�R˜ ¤Ñ/Ñ0Ñ0Ð0r2   r+   )%rr   rs   rt   ru   r0  r1  r   r   r   r   r
   r	   r   r   r   r   r2  r]   r€  rŒ  rW  r   r_  rf  rV  ri   ry  r”  rZ  r^  r›  rõ   r‰  rw  r±  r!  rj   r+   r2   r0   r1  r1  Ž  s-  € € € € € Ø.Ð.àˆwð F
ð F
ð F
Ø �L  ¨9°U°U¸6±]´]Ð*CÑ!DÔ!DÐKjÐkÑkÔkÐkðF
à�,˜yÐ/PÐQÑQÔQÐQðF
ð #�l 9Ð3PÐQÑQÔQÐQðF
ð %˜ YÐ5TÐUÑUÔUÐUð	F
ð
 $�| IÐ4RÐSÑSÔSÐSðF
ð #�l 9Ð3PÐQÑQÔQÐQðF
ð #�l 8Ð2QÐRÑRÔRÐRðF
ð #�l =Ð7VÐWÑWÔWÐWðF
ð '˜,Ð'<ÐCcÐdÑdÔdÐdðF
ð %˜ U U¨1¨Q¨q¡\¤\Ð7\Ð]Ñ]Ô]Ð]ðF
ð &˜ e e¨A¨a°¡l¤lÐ8^Ð_Ñ_Ô_Ð_ðF
ð (˜<¨Ð6\Ð]Ñ]Ô]Ð]ðF
ð '˜, xÐ6LÐMÑMÔMÐMðF
ð '˜, }Ð;QÐRÑRÔRÐRðF
ð +˜lÐ+@ÐGhÐiÑiÔiÐiðF
ð  )˜L¨¨¨q°°1©¬Ð;eÐfÑfÔfÐfð!F
ð" *˜\¨%¨%°°!°A©,¬,Ð<gÐhÑhÔhÐhð#F
ð$  ,˜|¨HÐ:eÐfÑfÔfÐfð%F
ð& !�L Ð6[Ð\Ñ\Ô\Ð\ð'F
ð( �,˜~Ð4WÐXÑXÔXÐXð)F
ð* $�| IÐ4cÐdÑdÔdÐdð+F
ð, *˜\¨(Ð9dÐeÑeÔeÐeð-F
ð. $�| HÐ3MÐNÑNÔNÐNð/F
ð0 �˜dÐ)EÐFÑFÔFÐFð1F
ð2 %˜ U U¨6°%¸Ñ%?Ô%?ÐFrÐsÑsÔsÐsð3F
ð4 '˜, tÐ2gÐhÑhÔhÐhð5F
ð6 +˜l¨4Ð6PÐQÑQÔQÐQð7F
ð8 &˜ nÐ;[Ð\Ñ\Ô\Ð\ð9F
ð:  �< Ð5MÐNÑNÔNÐNð;F
ð<  �< Ð5MÐNÑNÔNÐNð=F
ð> !�L Ð6UÐVÑVÔVÐVð?F
ð@ "�\Ð"7Ð>fÐgÑgÔgÐgðAF
ðB &˜ h h°¸z¸zÈ(Ð[\Ð`aÐefÐ?gÑ?gÔ?gÐ/hÑ&iÔ&ið  qað  bñ  bô  bð  bðCF
ðD '˜, x x°À
À
È8Ð\]ÐabÐfgÐ@hÑ@hÔ@hÐ0iÑ'jÔ'jð  rSð  Tñ  Tô  Tð  TðEF
ðF '˜, x x°°¸	Ñ1BÔ1BÀ:À:ÈiÐ`aÐefÐjkÐClÑClÔClÐ0mÑ'nÔ'nð  vEð  Fñ  Fô  Fð  FðGF
ðH  �<   f¨V°I¸gÑ FÔ FÐGeÑfÔfÐfðIF
ðJ "�\ .Ð7ZÐ[Ñ[Ô[Ð[ðKF
ðL �˜U˜U 8¨I°mÑDÔDÐE^Ñ_Ô_Ð_ðMF
ðN  �<   f¨W°U¸6Ñ BÔ BÐIdÐeÑeÔeÐeðOF
ðP $�| NÐ9]Ð^Ñ^Ô^Ð^ðQF
ðR $�| NÐ9SÐTÑTÔTÐTðSF
ðT !- ¨^ÐB[Ð \Ñ \Ô \Ð \ðUF
ðV $�| E E¨&°°vÑ$>Ô$>ÐEkÐlÑlÔlÐlðWF
ðX (˜<¨	Ð8]Ð^Ñ^Ô^Ð^ðYF
ðZ #�l 4Ð-BÐCÑCÔCÐCð[F
ð\ �˜hÐ-YÐZÑZÔZÐZð]F
ð^ �˜hÐ-VÐWÑWÔWÐWð_F
ð` "�\ (Ð1RÐSÑSÔSÐSðaF
ðb !�L Ð0GÐHÑHÔHÐHðcF
ðd !�L Ð0FÐGÑGÔGÐGðeF
ðf '˜, yÐ7YÐZÑZÔZÐZðgF
ðh &˜ iÐ6WÐXÑXÔXÐXðiF
ðj *˜\¨(Ð9OÐPÑPÔPÐPðkF
ðl *˜\¨-Ð>TÐUÑUÔUÐUðmF
ðn ". Ð.CÐJkÐ!lÑ!lÔ!lÐ!lðoF
ðp  ,˜|¨E¨E°!°A°a©L¬LÐ>hÐiÑiÔiÐiðqF
ðr !- ¨U¨U°1°Q°q©\¬\Ð?jÐ kÑ kÔ kÐ kðsF
ðt #/ ,¨xÐ=hÐ"iÑ"iÔ"iÐ"iðuF
ðv $�| NÐ9^Ð_Ñ_Ô_Ð_ðwF
ðx "�\ .Ð7ZÐ[Ñ[Ô[Ð[ðyF
ðz '˜, xÐ6TÐUÑUÔUÐUð{F
ð| *˜\¨(Ð9[Ð\Ñ\Ô\Ð\ð}F
ð~ *˜\¨-Ð>`ÐaÑaÔaÐaðF
ð@ '˜, }Ð;YÐZÑZÔZÐZðAF
ðB  ,˜|¨IÐ<}Ð~Ñ~Ô~Ð~ðCF
ðD  �<   f¨U°6¸(Ñ CÔ CÐDmÑnÔnÐnðEF
ðF %˜ ^Ð:YÐZÑZÔZÐZðGF
ðH %˜Ð%5Ð<aÐbÑbÔbÐbðIF
ðJ )˜LÐ)>ÐEqÐrÑrÔrÐrðKF
€HðPVð Vð Vðp%ð %ð %ðð ð ð ð ð ð
 €Y�[„[ð,ð ,ñ „[ð,ð!ð !ð !ð(_ð _ð _ðBð ð ðð ð ðð ð ð!ð !ð !ð?ð ?ð ?ð03ð 3ð 3ð(ð (ð (ðT ð  ð  ð-ð -ð -ð)ð )ð )ðTð Tð Tðl1ð 1ð 1ð 1ð 1r2   r1  c                   óà   — e Zd ZdZ ee eed¬¦  «         eed¬¦  «         edd¬¦  «         e eddd	d
d¦  «        d¬¦  «         ee	d¬¦  «        ¬¦  «        Z
dZd„ Zd„ Zdd„Zd„ Zd„ ZdS )r·  zX/value axisrÏ  r'  rÐ  NrQ  ro  rm  rÑ  rÒ  rÓ  rS  )r)  r½  r¾  r~   rx  rR  r   c                 ó¸   — t          j        | fi |¤Ž d| j        _        d| j        _        d| j        _        d| _        d| _        d | _        d | _	        d | _
        d S )Nr�  r   rÕ  rÖ  )r1  r]   rN  r×  r  rØ  r½  r¾  r~   rx  rR  r.  s     r0   r]   zXValueAxis.__init__õ  sb   € ÝÔ˜4Ð%Ð% "Ð%Ð%Ð%à #ˆŒÔØˆŒŒØˆŒŒàˆŒØˆŒàˆŒØ ˆÔØˆÔÐÐr2   c                 óª   — |                       ddd¦  «         |                      dg¦  «         t          dd¦  «        }|                     | ¦  «         |S )Nrß  rt  é–   rÝ  rç  ru  ©r€  rŒ  r   r£   rê  s     r0   rë  zXValueAxis.demo  sS   € Ø×Ò˜˜R Ñ%Ô%Ð%Ø�ŠÐ(Ð)Ñ*Ô*Ð*å�C˜ÑÔˆØ	�Šˆd‰ŒˆØˆr2   c                 óþ   — t          |¦  «         |dk    r|j        dz  | _        dS |dk    r|j        |j        z   dz  | _        dS |dk    r|                     |¦  «        dz  | _        dS |dk    r|dz  | _        dS dS )rí  ro  r  rm  rÑ  rÒ  Nrî  rï  s       r0   rò  zXValueAxis.joinToAxis  s•   € å�UÑÔÐØ�8ÒÐØ”h ‘nˆDŒGˆGˆGØ�UŠ]ˆ]Ø”x %¤-Ñ/°3Ñ6ˆDŒGˆGˆGØ�WŠ_ˆ_Ø—k’k #Ñ&Ô&¨Ñ,ˆDŒGˆGˆGØ�XÒÐØ˜C‘iˆDŒGˆGˆGð Ðr2   c                 ó®   — | j         }|rI| j        pd}|dv r|                      ||¬¦  «         d S |dv r!|                      ||| j        ¬¦  «         d S d S d S )Nro  rô  rõ  rö  r÷  rø  rù  s      r0   rü  zXValueAxis._joinToAxis  sˆ   € ØŒ]ˆØð 	DØÔ#Ð/ xˆCØÐ'Ð'Ð'Ø—’ ¨�Ñ-Ô-Ð-Ð-Ð-ØÐ+Ð+Ð+Ø—’ ¨°$Ô2B�ÑCÔCÐCÐCÐCð	Dð 	Dð ,Ð+r2   c                 óJ  — t          ¦   «         }|                      ¦   «          | j        s|S t          | j        | j        z
  | j        | j        | j        z   | j        z   | j        ¦  «        }| j	        |_	        | j
        |_
        | j        |_        |                     |¦  «         |S r*   r   r  s      r0   r  zXValueAxis.makeAxis   r  r2   r  ©rr   rs   rt   ru   r0  r1  r1  r   r   r   r2  rý   r]   rë  rò  rü  r  r+   r2   r0   r·  r·  â  s  € € € € € Ø€Nàˆw˜IØ�˜hØ+ð-ñ -ô -à�< Ø-ð/ñ /ô /à�< Ø*ð,ñ ,ô ,à#�| E E¨(°E¸7ÀHÈdÑ$SÔ$SØ\ð^ñ ^ô ^à"�l >Ø=ð?ñ ?ô ?ð
ñ 
ô 
€Hð €Jð ð  ð  ðð ð ð
 ð 
 ð 
 ð 
 ðDð Dð Dðð ð ð ð r2   r·  )ÚjanÚfebÚmarÚaprÚmayÚjunÚjulÚaugÚsepÚoctÚnovÚdec)é   é   rÜ  rÚ  rÜ  rÚ  rÜ  rÜ  rÚ  rÜ  rÚ  rÜ  c                 óæ   — |                       d¦  «        \  }}t          |¦  «        }|                     ¦   «         }t                               |¦  «        dz   }|t
          |dz
           k    sJ ‚||fS )a  This accepts and validates strings like "31-Dec" i.e. dates
    of no particular year.  29 Feb is allowed.  These can be used
    for recurring dates.  It returns a (dd, mm) pair where mm is the
    month integer.  If the text is not valid it raises an error.
    ú-rN   )ÚsplitrP   ÚlowerÚ_monthsÚindexÚ_maxDays)ÚdmstrÚdstrÚmstrÚddÚmms        r0   ÚparseDayAndMonthrê  9  si   € ð —’˜SÑ!Ô!�J€Dˆ$Ý	ˆT‰Œ€BØ�:Š:‰<Œ<€DÝ	�Š�tÑ	Ô	˜qÑ	 €BØ•˜"˜Q™$”ÒÐÐÐØ�ˆ8€Or2   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú_isListOfDaysAndMonthsz¤This accepts and validates lists of strings like "31-Dec" i.e. dates
    of no particular year.  29 Feb is allowed.  These can be used
    for recurring dates.
    c                 ón   — t          |¦  «        r%d}|D ]}	 t          |¦  «        \  }}Œ#  d}Y ŒxY w|S dS r±   )r'   rê  )r[   r-   ÚanswerÚelementrè  ré  s         r0   Útestz_isListOfDaysAndMonths.testL  sX   € Ý�‰8Œ8ð 		ØˆFØð #ð #�ð#Ý-¨gÑ6Ô6‘F�B˜˜øð#Ø"�F�F�FøøøØˆMà�5s   —*ª0c                 ó   — |S r*   r+   )r[   r-   s     r0   Ú	normalizez _isListOfDaysAndMonths.normalizeX  s   € àˆr2   N)rr   rs   rt   ru   rð  rò  r+   r2   r0   rì  rì  G  s<   € € € € € ðð ð
ð 
ð 
ðð ð ð ð r2   rì  )rN   r@  r   é   é   é   é<   éx   é´   éð   i,  ih  i¤  ià  i  iX  iÐ  iH  iÀ  i8  i°  i`	  c                   óð  — e Zd ZdZ ee eed¬¦  «         eed¬¦  «         eed¬¦  «         eed¬¦  «         ee	d¬¦  «         edd	¬¦  «         e e
ed
dd¬¦  «        d¬¦  «         e e
ed
dd¬¦  «        d¬¦  «         eed¬¦  «         e e e
e¦  «        ¦  «        d¬¦  «         eed¬¦  «         e edddd¦  «        d¦  «        ¬¦  «        Zej        Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS ) ÚNormalDateXValueAxisz×An X axis applying additional rules.

    Depending on the data and some built-in rules, the axis
    displays normalDate values as nicely formatted dates.

    The client chart should have NormalDate X values.
    z.Fractional amount used to adjust label spacingr'  z$Flag for displaying months 'nicely'.z0Flag for enforced displaying of last date value.z1Flag for enforced displaying of first date value.zÖList of dates in format "31-Dec","1-Jan".  If present they will always be used for tick marks in the current year, rather than the dates chosen by the automatic algorithm. Hyphen compulsory, case of month optional.Nz3Label format string (e.g. '{mm}/{yy}') or function.r   rS  r>  zWeekday names.rô  zMonth names.zATrue if we are to assume daily data to be ticked at end of month.z/Actual tick values to use; no calculations donez@clear rather than delete close ticks when forced first/end datesrl  rm  rn  ro  rp  )r)  ÚbottomAxisLabelSlackÚ	niceMonthÚforceEndDateÚforceFirstDateÚforceDatesEachYearÚxLabelFormatÚdayOfWeekNameÚ	monthNameÚ	dailyFreqÚspecifiedTickDatesÚspecialTickClearrk  c                 óÚ   — t          j        | fi |¤Ž d| _        d| _        d| _        d| _        g | _        d| _        d| _        g d¢| _	        g d¢| _
        d| _        d x| _        | _        d S )Nrl  rN   r   z	{mm}/{yy})ÚMondayÚTuesdayÚ	WednesdayÚThursdayÚFridayÚSaturdayÚSunday)ÚJanuaryÚFebruaryÚMarchÚAprilÚMayÚJuneÚJulyÚAugustÚ	SeptemberÚOctoberÚNovemberÚDecember)r·  r]   rü  rý  rþ  rÿ  r   r  r  r  r  r  r<  r  r.  s     r0   r]   zNormalDateXValueAxis.__init__{  s”   € ÝÔ˜DÐ&Ð& 2Ð&Ð&Ð&ð %(ˆÔ!ØˆŒØˆÔØˆÔØ"$ˆÔØˆŒØ'ˆÔØkÐkÐkˆÔðVð Vð VˆŒà !ˆÔØ48Ð8ˆŒ˜$Ô1Ð1Ð1r2   c                 óX   — |                       ¦   «         }|                     |¦  «         |S )z'Convert a scalar to a NormalDate value.)Ú_valueClassrò  )r[   r-   r†   s      r0   Ú
_scalar2NDzNormalDateXValueAxis._scalar2NDŒ  s'   € à×ÒÑÔˆØ	�Š�A‰ŒˆØˆr2   c                 óz  — t          |t          j        ¦  «        s|                      |¦  «        }t          j        t          j        }}	 | j        | j        ct          _        t          _        |                     | j	        ¦  «        ||ct          _        t          _        S # ||ct          _        t          _        w xY w)z(Create a formatted label for some value.)
r¡   r   Ú
NormalDater  Ú_dayOfWeekNameÚ
_monthNamer  r  ÚformatMSr  )r[   rR   r†   rd  s       r0   Ú_dateFormatterz#NormalDateXValueAxis._dateFormatter’  s›   € å˜!�JÔ1Ñ2Ô2ð 	#Ø—’ Ñ"Ô"ˆAÝÔ(­*Ô*?ˆ1ˆð	DØ?CÔ?QÐSWÔSaÐ<�JÔ%¥zÔ'<Ø—:’:˜dÔ/Ñ0Ô0à?@À!Ð<�JÔ%¥zÔ'<Ð'<ø¸qÀ!Ð<�JÔ%¥zÔ'<ÐCÐCÐCÐCs   Á	<B ÂB:c                 óP  ‡ ‡!‡"— ‰ j         Š!‰ j        }‰ j        Š"t          ‰"t          ¦  «        rˆ fd„Š"‰ j        s|d         n ‰!‰ j        ¦  «        }‰ j        s|d         n ‰!‰ j        ¦  «        }‰ j        }|j        |j	        |j
        }}}|j        |j        |j        }}
}	t           ‰"|¦  «                             d¦  «        |||pd|z  |	|
¦  «        }t!          |d         |d         |d         |d         |¦  «        }|d         |d         z
  }|d         |d         z
  }t#          ||j        pd‰ j        ¦  «        }||‰ j        z  z   }g }g }‰ j        }‰ j        rßˆ!fd	„‰ j        D ¦   «         }ˆ"fd
„|D ¦   «         }‰ j        rV||d         k    rJ|t1          |d         |d         z
  ¦  «        z  |d         |d         z
  z  |k    r‰ j        rd|d<   n|d= |d= ‰ j        rV||d         k    rJ|t1          |d         |d         z
  ¦  «        z  |d         |d         z
  z  |k    r‰ j        rd|d<   n|d= |d= ||fS ‰ j        �rêt9          t;          t<          ‰ j        ¦  «        ¦  «        }|                     ¦   «         }|                     ¦   «         }g }g }|}||k    ri|D ][\  }}tA          j!        |||f¦  «        }||k    r9||k    r3| "                    |¦  «         | "                     ‰"|¦  «        ¦  «         Œ\|dz  }||k    °i‰ j        r‹||d         k    r| #                    d|¦  «         | #                    d ‰"|¦  «        ¦  «         |t1          |d         |d         z
  ¦  «        z  |d         |d         z
  z  |k    r‰ j        rd|d<   n|d= |d= ‰ j        r‰||d         k    r}| "                    |¦  «         | "                     ‰"|¦  «        ¦  «         |t1          |d         |d         z
  ¦  «        z  |d         |d         z
  z  |k    r‰ j        rd|d<   n|d= |d= ||fS |‰"||fd„}tI          |¦  «        }tJ          D �]È}||z  }||k    �r¹||z  |k    �r¯|dz
  }‰ j&        rE| '                    ¦   «         |dk    r|pdz  }|r$‰ j        r ||¦  «         d|d         _(        ||z  }	 | '                    ¦   «         |d          '                    ¦   «         k    } n	#  d} Y nxY w|| k    r ||¦  «         ||z  }|| k    °‰ j        rn|d         |k    rb |d¦  «         d|d         _(        |t1          |d         |d         z
  ¦  «        z  |d         |d         z
  z  |k    r‰ j        rd|d<   n|d= |d= ‰ j        rS‰ j&        rL|rJ|t1          |d         |d         z
  ¦  «        z  |d         |d         z
  z  |k    r‰ j        rd|d<   n|d= |d= 	 |d         r|d         |d         k    r|d= |d= n# tR          $ r Y nw xY w||fc S �ŒÊtU          d¦  «        ‚)zÈComplex stuff...

        Needs explanation...

        Yes please says Andy :-(.  Modified on 19 June 2006 to attempt to allow
        a mode where one can specify recurring days and months.
        c                 ó0   •— ‰                      ‰| ¦  «        S r*   )r#  )r¿  r[   s    €r0   Ú	formatterz4NormalDateXValueAxis._xAxisTicker.<locals>.formatter©  s   ø€ Ø×*Ò*¨4°Ñ5Ô5Ð5r2   r   r�  ú
rh  rN   r@  r   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r+   r+   )r<   r-   ÚVCs     €r0   r=   z5NormalDateXValueAxis._xAxisTicker.<locals>.<listcomp>½  s!   ø€ Ð<Ð<Ð<˜q�R�R˜‘U”UÐ<Ð<Ð<r2   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r+   r+   )r<   r†   r&  s     €r0   r=   z5NormalDateXValueAxis._xAxisTicker.<locals>.<listcomp>¾  s!   ø€ Ð2Ð2Ð2 q�i�i ‘l”lÐ2Ð2Ð2r2   r  r  c                 óˆ   — |                      d||          ¦  «         |                      d |||          ¦  «        ¦  «         d S r¼   )r¡  )r¨   ÚxValsr&  ÚticksrN  s        r0   ÚaddTickz2NormalDateXValueAxis._xAxisTicker.<locals>.addTickö  sB   € Ø�LŠL˜˜5 œ8Ñ$Ô$Ð$Ø�MŠM˜!˜I˜I e¨A¤hÑ/Ô/Ñ0Ô0Ð0Ð0Ð0r2   rô  z6Problem selecting NormalDate value axis tick positions)+r  r‰   r#  r¡   r,  r9  r:  rN  ÚfontNameÚfontSizeÚleadingÚ
textAnchorr×  ré  r   rà  r   rK   rž   r4  rü  r5  r  rÿ  r}  r  rþ  r   r5   r6   rê  Úyearr   ÚNDr  r¡  r?   Ú_NDINTMrý  ÚmonthrŸ  r·   r¶  )#r[   r,  Ú
axisLengthÚ	firstDateÚendDaterN  r/  r0  r1  r2  r×  ré  ÚRBLÚxLabelWÚxLabelHrì   ÚWr-  r5  ÚforcedPartialDatesÚ	firstYearÚlastYearÚyyyyrè  ré  ÚtheDater.  r�  r†   r•   r¨   rª  Úwfdr)  r&  s#   `                                @@r0   Ú_xAxisTickerz!NormalDateXValueAxis._xAxisTicker�  sœ  øøø€ ð ÔˆØ”\ˆ
ØÔ'ˆ	Ý�i¥Ñ-Ô-ð 	6ð6ð 6ð 6ð 6ð 6à$(¤MÐH�E˜!”H�H°r°r¸$¼-Ñ7HÔ7Hˆ	Ø#'¤=ÐG�%˜”)�)°b°b¸¼Ñ6GÔ6GˆØ”ˆØ&,¤o°v´ÈÌ˜G�(ˆØ'-Ô'8¸&Ô:JÈFÌL˜u�Iˆ
Ý˜Y˜Y yÑ1Ô1×7Ò7¸Ñ=Ô=¸hØ˜WÐ4¨¨H©°ZÀ	ñKô Kˆå  A¤ s¨1¤v¨c°!¬f°S¸´V¸UÑCÔCˆØ�a”&˜˜Qœ‘-ˆØ�a”&˜˜Qœ‘-ˆÝ�˜œÐ)¨¨$Ô*AÑBÔBˆàˆa�Ô)Ñ)Ñ)ˆØˆØˆØÔ(ˆàÔ"ð 	!Ø<Ð<Ð<Ð< DÔ$;Ð<Ñ<Ô<ˆEØ2Ð2Ð2Ð2¨EÐ2Ñ2Ô2ˆFØÔ"ð , y°%¸´(Ò':Ð':À
Í5ÐQVÐWYÔQZÐ[`ÐabÔ[cÑQcÑKdÔKdÑ@dÐglÐmnÔgoÐpuÐvwÔpxÑgxÑ?yÐ{|Ò?|Ð?|ØÔ(ð ,Ø "�F˜1‘I�Ià˜a˜ &¨ )ØÔ ð . W¨e°B¬iÒ%7Ð%7¸ZÍÈeÐTVÌiÐX]Ð^_ÔX`ÑN`ÑHaÔHaÑ=aÐdiÐjlÔdmÐnsÐtvÔnwÑdwÑ<xÐz{Ò<{Ð<{ØÔ(ð .Ø!#�F˜2‘J�Jà˜b˜	 6¨" :Ø˜&�=Ð ð
 Ô"ñ &	!Ý!%¥cÕ*:¸DÔ<SÑ&TÔ&TÑ!UÔ!UÐð "ŸšÑ(Ô(ˆIØ—|’|‘~”~ˆHØˆEØˆFØˆDð ˜(Ò"Ð"Ø 2ð :ð :‘H�R˜Ý(œm¨T°2°r¨NÑ;Ô;�GØ )Ò+Ð+°¸7Ò0BÐ0BØŸš WÑ-Ô-Ð-ØŸš i i°Ñ&8Ô&8Ñ9Ô9Ð9øØ˜‘	�ð ˜(Ò"Ð"ð Ô"ð 0 y°%¸´(Ò':Ð':Ø—’˜Q 	Ñ*Ô*Ð*Ø—’˜a 	 	¨)Ñ 4Ô 4Ñ5Ô5Ð5Ø�u U¨2¤Y¨u°Q¬xÑ%7Ñ8Ô8Ñ8¸5À¼8ÀEÈ!ÄHÑ;LÑMÈqÒPÐPØÔ,ð 0Ø$&˜˜q™	˜	à! !˜H f¨Q iØÔ ð 2 W¨e°B¬iÒ%7Ð%7Ø—’˜WÑ%Ô%Ð%Ø—’˜i˜i¨Ñ0Ô0Ñ1Ô1Ð1Ø�u U¨2¤Y¨u°Q¬xÑ%7Ñ8Ô8Ñ8¸5À¼9ÀUÈ2ÄYÑ;NÑOÐQRÒRÐRØÔ,ð 2Ø%'˜˜r™
˜
à! "˜I v¨b zð ˜&�=Ð à"¨i¸uÈVð 	1ð 	1ð 	1ð 	1õ �‰JŒJˆõ ð *	%ñ *	%ˆAØ�!‘ˆAØ�,Š‰ 1 Q¡3¨*Ò#4Ñ#4Ø�a‘C�Ø”>ð ØŸš™œ¨1¨bª5¨;°QÐ+<¸"Ñ=�AØð ØÔ,ð 3Ø#˜G A™JœJ˜JØ12˜E !œHÔ0Ø˜Q™˜ðØ#Ÿ/š/Ñ+Ô+¨u°Q¬x¯~ª~Ñ/?Ô/?Ò?�C�CøðØ�C�C�Cøøøà˜’f�fØ�G˜A‘J”J�JØ˜‘F�Að ˜’f�fð Ô&ð 4¨5°¬8°YÒ+>Ð+>Ø�G˜A‘J”J�JØ)*�E˜!”HÔ(Ø"¥5¨¨r¬°5¸´8Ñ);Ñ#<Ô#<Ñ<¸uÀQ¼xÈÈaÌÑ?PÑQÐSTÒTÐTØÔ0ð 4Ø(*˜F 1™I˜Ià % a ¨&°¨)ØÔ$ð 6¨¬ð 6¸Að 6Ø"¥5¨¨r¬°5¸´8Ñ);Ñ#<Ô#<Ñ<¸uÀR¼yÈÈrÌÑ?RÑSÐUVÒVÐVØÔ0ð 6Ø)+˜F 2™J˜Jà % b 	¨6°"¨:ðØ˜a”yð 0 V¨A¤Y°°q´	Ò%9Ð%9Ø! !˜H f¨Q iøøÝ!ð ð ð Ø�Dðøøøð ˜f�}Ð$Ð$Ð$ùÝÐQÑRÔRÐRs   Ò:0S+Ó+S1×  XØ
XØXc                 ó²   — | j         }|D ]L}t          t          |¦  «        ¦  «        D ]-}||         \  }}t          ||¦  «        s ||¦  «        |f||<   Œ.ŒMdS )z1Convert all XValues to a standard normalDate typeN)r  r    r?   r¡   )r[   Údatar)  r  r¨   r-   re   s          r0   Ú
_convertXVzNormalDateXValueAxis._convertXV*  sz   € ð ÔˆØð 	%ð 	%ˆAÝ�3˜q™6œ6‘]”]ð %ð %�Ø˜”t‘��1Ý! ! BÑ'Ô'ð %Ø˜B˜q™EœE !˜9�A�a‘Døð%ð	%ð 	%r2   c                 óX  — | j         rˆg }d}|d         }|D ]7}|                     ¦   «         }||k    r|r|                     |¦  «         |}|}Œ8|d         }|d         |k    r|                     |¦  «         |                      |¦  «        \  }}n|                      |¦  «        \  }}||fS )Nr   r�  )r  r6  r  rD  )	r[   r,  ÚxEOMÚpmÚpxr-   rd  ÚstepsrN  s	            r0   Ú_getStepsAndLabelsz'NormalDateXValueAxis._getStepsAndLabels4  sÂ   € ØŒ>ð 	5ØˆDØˆBØ�q”ˆBØð ð �Ø—G’G‘I”I�Ø�q’5�5ØÐ*˜4Ÿ;š; r™?œ?˜?Ø�BØ��Ø�r”ˆBØ�BŒx˜Š{ˆ{˜DŸKšK¨™OœO˜OØ ×-Ò-¨dÑ3Ô3‰MˆE�6�6à ×-Ò-¨eÑ4Ô4‰MˆE�6Ø�fˆ}Ðr2   c                 ó  — |                       |¦  «         t          ¦   «         }|D ]"}|D ]}|                     |d         ¦  «         ŒŒ#t          |¦  «        }|                     ¦   «          | j        }|                      |¦  «        \  }}| j        | j        }	}|€|d         n
 ||¦  «        }|	€|d         n
 ||	¦  «        }	||	c| _	        | _
        || _        || _        | j        t          |	|z
  ¦  «        z  | _        || _        d| _        d S )Nr   r�  rN   )rG  Úsetr£   r5   Úsortr  rM  r9  r:  r\  r]  rb   ry  r‰   r}  r—  rR  )
r[   rF  r,  r-   Údvr)  rL  rN  r9  r:  s
             r0   rŒ  zNormalDateXValueAxis.configureF  s#  € Ø�Š˜ÑÔÐÝ‘”ˆØð 	!ð 	!ˆAØð !ð !�Ø—	’	˜"˜Qœ%Ñ Ô Ð Ð ð!å�U‘”ˆØ�
Š
‰ŒˆØÔˆØ×.Ò.¨uÑ5Ô5‰ˆˆfØ!œ]¨D¬M�(ˆØ (Ð 0�5˜”8�8°b°b¸±l´lˆØ (Ð 0�5˜”9�9°b°b¸±l´lˆØ)1°8Ð&ˆŒ˜œØ ˆÔØ &ˆÔà œL­5°¸HÑ1DÑ+EÔ+EÑEˆÔØ ˆÔØˆÔÐÐr2   )rr   rs   rt   ru   r0  r·  r1  r   r   ÚisListOfDaysAndMonthsr   r   r   r   r   r2  r   r4  r  r]   r  r#  rD  rG  rM  rŒ  r+   r2   r0   rû  rû  _  sü  € € € € € ðð ð ˆw˜jØ+˜|¨HÐ;kÐlÑlÔlØ �L Ð1WÐXÑXÔXØ#�| IÐ4fÐgÑgÔgØ%˜ iÐ6iÐjÑjÔjØ)˜\Ð*?ð Gkð lñ lô lð $�| DÐ/dÐeÑeÔeØ$˜ Z Z°ÀÀaÈ1Ð%MÑ%MÔ%MÐTdÐeÑeÔeØ �L  ¨H¸QÀ"ÈÐ!KÑ!KÔ!KÐR`ÐaÑaÔaØ �L Ð1tÐuÑuÔuØ)˜\¨&¨&°°¸LÑ1IÔ1IÑ*JÔ*Jð  RCð  Dñ  Dô  DØ'˜<¨	Ð8zÐ{Ñ{Ô{Ø�<   f¨U°6¸(Ñ CÔ CÐDmÑnÔnð
ñ 
ô 
€Hð" ”-€Kð9ð 9ð 9ð"ð ð ð	Dð 	Dð 	DðKSð KSð KSðZ%ð %ð %ðð ð ð$ð ð ð ð r2   rû  c                   óØ   — e Zd ZdZ ee eed¬¦  «         eed¬¦  «         edd¬¦  «         e ed¦  «        d¬¦  «         ee	d	¬¦  «        ¬
¦  «        Z
dZd„ Zd„ Zdd„Zd„ Zd„ ZdS )Ú
YValueAxiszY/value axisr  r'  r  NrQ  r  r  rS  )r)  rË  rÊ  r~   rx  rR  rN   c                 óÈ   — t                                | ¦  «         d| j        _        d| j        _        d| j        _        d| _        d| _        d | _        d | _	        d | _
        d S )Nr7   rÕ  r   rÖ  )r1  r]   rN  r×  r  rØ  rÊ  rË  r~   rx  rR  rz  s    r0   r]   zYValueAxis.__init__n  s]   € Ý×Ò˜4Ñ Ô Ð à #ˆŒÔØˆŒŒØˆŒŒàˆŒØˆŒàˆŒØ ˆÔØˆÔÐÐr2   c                 ó®   — dg}|                       ddd¦  «         |                      |¦  «         t          dd¦  «        }|                     | ¦  «         |S )N)rÞ  rß  rÚ  é*   ru  rÞ  r  rç  rË  )r[   rF  Údrawings      r0   rë  zYValueAxis.demo|  sZ   € Ø Ð!ˆØ×Ò˜˜b "Ñ%Ô%Ð%Ø�Š�tÑÔÐå˜#˜sÑ#Ô#ˆØ�Š�DÑÔÐØˆr2   r  c                 óþ   — t          |¦  «         |dk    r|j        dz  | _        dS |dk    r|j        |j        z   dz  | _        dS |dk    r|                     |¦  «        dz  | _        dS |dk    r|dz  | _        dS dS r  r   r!  s       r0   rò  zYValueAxis.joinToAxis…  s“   € å�UÑÔÐØ�6Š>ˆ>Ø”h ‘nˆDŒGˆGˆGØ�WŠ_ˆ_Ø”x %¤-Ñ/°3Ñ6ˆDŒGˆGˆGØ�WŠ_ˆ_Ø—k’k #Ñ&Ô&¨Ñ,ˆDŒGˆGˆGØ�XÒÐØ˜C‘iˆDŒGˆGˆGð Ðr2   c                 óª   — | j         }|rG| j        }|dv r|                      ||¬¦  «         d S |dv r!|                      ||| j        ¬¦  «         d S d S d S r$  rø  rù  s      r0   rü  zYValueAxis._joinToAxis‘  rý  r2   c                 óJ  — t          ¦   «         }|                      ¦   «          | j        s|S t          | j        | j        | j        z
  | j        | j        | j        z   | j        z   ¦  «        }| j	        |_	        | j
        |_
        | j        |_        |                     |¦  «         |S r*   r'  r  s      r0   r  zYValueAxis.makeAxisš  s‘   € Ý‰GŒGˆØ×ÒÑÔÐØÔÐ)¨ å�D”G˜TœW T¤[Ñ0°$´'¸4¼7ÀTÄ\Ñ;QÐRVÔR]Ñ;]Ñ^Ô^ˆØÔ+ˆÔØÔ+ˆÔØ#Ô3ˆÔØ	�Šˆd‰ŒˆØˆr2   r*  rÏ  r+   r2   r0   rT  rT  [  s  € € € € € Ø€Nàˆw˜IØ�< Ø0ð2ñ 2ô 2à �L Ø1ð3ñ 3ô 3à�< Ø*ð,ñ ,ô ,à#�| E EÐ*TÑ$UÔ$UØ\ð^ñ ^ô ^à"�l >Ø=ð?ñ ?ô ?ð
ñ 
ô 
€Hð €Jð ð  ð  ðð ð ð
 ð 
 ð 
 ð 
 ðDð Dð Dð
ð 
ð 
ð 
ð 
r2   rT  c                   ó8   — e Zd ZdZdez  Zdez  Zd„ Zd„ Zd„ ZdS )ÚTimeValueAxisrö  rõ  c                 ó:   — | j         s| j        | _         i | _        d S r*   )r6  ÚtimeLabelTextFormatterÚ_saved_tickInfo©r[   Úargsr\   s      r0   r]   zTimeValueAxis.__init__«  s&   € ØÔ#ð 	?Ø#'Ô#>ˆDÔ Ø!ˆÔÐÐr2   c                 óì  — | j         €à| j        | j        z
  }|t          t	          | j        dz
  ¦  «        t	          | j        ¦  «        | j        z  ¦  «        z  }|| j        k    r| j        }d| _	        n=|| j
        k    r| j
        }d| _	        n#|| j        k    r| j        }d| _	        n	d}d| _	        || _        |dk    rt          ||z  ¦  «        }t          |¦  «        |z  | _        dS | j         | _        dS )r­  NrN   ÚdaysÚhoursÚminutesÚseconds)r;  r]  r\  rG   r}  r5  r‰   r4  Ú_dcÚ_unitÚ_hcÚ_mcÚ_unitdrP   r$   rx  )r[   r®  r¯  r†   s       r0   rw  zTimeValueAxis._calcValueStep°  sø   € àŒ>Ð!Ø”~¨¬Ñ6ˆHØ"¥S­¨tÔ/@ÀÑ/BÑ)CÔ)CÅUÈ4Ì<ÑEXÔEXÐY]ÔYpÑEpÑ%rÔ%rÑrˆKà˜dœhÒ&Ð&Ø”H�Ø#�”
�
Ø ¤Ò(Ð(Ø”H�Ø$�”
�
Ø ¤Ò(Ð(Ø”H�Ø&�”
�
à�Ø&�”
ØˆDŒKØ�ŠsˆsÝ! +¨a¡-Ñ0Ô0�Ý-¨kÑ:Ô:¸QÑ>ˆDŒOˆOˆOà"œnˆDŒOˆOˆOr2   c                 óL  ‡‡— | j         }|t          | j        ¦  «        f}|| j        v r| j        |         }nät	          |¦  «        Šˆfd„| j        D ¦   «         }| j        d         }t          |¦  «        r‰|fd„}n•d„ |D ¦   «         }t          d„ |D ¦   «         ¦  «        }|dk    r
‰d|z  fd„}n`|| j        k    rd	nd
Šˆfd„|D ¦   «         }	t          |	¦  «        r)|| j        k    rdn|| j	        k    rdnd}
‰‰d||
fz  fd„}n‰d||fz  fd„}|| j        |<    ||¦  «        S )Nc                 ó   •— g | ]}|‰z  ‘ŒS r+   r+   )r<   rR   Úufs     €r0   r=   z8TimeValueAxis.timeLabelTextFormatter.<locals>.<listcomp>Ð  s   ø€ Ð1Ð1Ð1˜1�!�B‘$Ð1Ð1Ð1r2   r   c                 ó   — d| |z  |fz  S )Nz%.0f%sr+   )r-   ro  r‘   s      r0   r1   z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>Ó  s   € ¨H¸¸"¹¸Q°xÑ,?€ r2   c                 ó   — g | ]}d |z  ‘ŒS )z%.10fr+   ©r<   rR   s     r0   r=   z8TimeValueAxis.timeLabelTextFormatter.<locals>.<listcomp>Õ  s   € Ð/Ð/Ð/ q�w ‘{Ð/Ð/Ð/r2   c              3   óŒ   K  — | ]?}t          |                     d ¦  «        ¦  «        |                     d¦  «        z
  dz
  V — Œ@dS )Ú0ú.rN   N)r?   Úrstriprã  rr  s     r0   ú	<genexpr>z7TimeValueAxis.timeLabelTextFormatter.<locals>.<genexpr>Ö  sH   è è € ÐLÐLÀ1�C §¢¨¡¤Ñ.Ô.¨q¯wªw°s©|¬|Ñ;¸AÑ=ÐLÐLÐLÐLÐLÐLr2   rN   z%%.%dfsc                 ó   — || |z  z  S r*   r+   ©r-   ro  Úfmts      r0   r1   z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>Ø  s   € ¸sÀaÈÁd¹|€ r2   rõ  rö  c                 ó:   •— g | ]}|t          |¦  «        z
  ‰z  ‘ŒS r+   rO   )r<   rR   Úfms     €r0   r=   z8TimeValueAxis.timeLabelTextFormatter.<locals>.<listcomp>Ü  s'   ø€ Ð6Ð6Ð6¨a˜1�s 1™vœv™: r™/Ð6Ð6Ð6r2   Úhrd  r‘   z%%d%s%%d%%sc           	      ó|   — |t          | |z  ¦  «        t          | |z  t          | |z  ¦  «        z
  |z  ¦  «        fz  S r*   rO   )r-   ro  r|  rz  s       r0   r1   z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>ß  sL   € ÐPSÕWZÐ[\Ð]_Ñ[_ÑW`ÔW`ÕadÐfgÐhjÑfjÕmpÐqrÐsuÑquÑmvÔmvÑfvÐxzÑezÑa{Ôa{ÐV|ÑP|€ r2   z%%.%df%sc                 ó   — || |z  z  S r*   r+   ry  s      r0   r1   z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>á  s   € ÈÈqÐQSÉtÉ€ r2   )
rl  Útuplerb   r`  r}  ri  rS   rK   rh  rk  )r[   Úvalr�  r•   rz  r¤   r‘   ÚstvÚstvlÚfvÚs1r|  ro  s              @@r0   r_  z$TimeValueAxis.timeLabelTextFormatterÉ  s�  øø€ ØŒKˆØ�u�TÔ%Ñ&Ô&Ð'ˆØ�Ô$Ð$Ð$ØÔ& qÔ)ˆCˆCå�q‘”ˆBØ1Ð1Ð1Ð1 Ô 0Ð1Ñ1Ô1ˆBØ”
˜1”ˆAÝ�r‰{Œ{ð UØ#%¨Ð?Ð?Ð?��à/Ð/¨BÐ/Ñ/Ô/�ÝÐLÐLÈÐLÑLÔLÑLÔL�Ø�a’4�4Ø&(¨Y¸Ñ-=ÐKÐKÐK�C�Cð  ! $¤(š{˜{˜˜°�BØ6Ð6Ð6Ð6°2Ð6Ñ6Ô6�BÝ˜r‘{”{ð UØ$% t¤x¢K K˜S˜S¸QÀÄº[¸[°c°cÈc˜Ø*,°¸ÈÈ2ÈÑ8NÐ|Ð|Ð|˜˜à*,°¸tÀA¸hÑ1FÐTÐTÐT˜Ø&)ˆDÔ  Ñ#àˆs�3‰xŒxˆr2   N)	rr   rs   rt   rk  rj  rh  r]   rw  r_  r+   r2   r0   r]  r]  ¦  sX   € € € € € Ø
€CØ
ˆS‰&€CØ
ˆS‰&€Cð"ð "ð "ð
-ð -ð -ð2ð ð ð ð r2   r]  c                   ó   — e Zd Zd„ ZdS )ÚXTimeValueAxisc                 óZ   — t          j        | g|¢R i |¤Ž t          j        | g|¢R i |¤Ž d S r*   )r·  r]   r]  ra  s      r0   r]   zXTimeValueAxis.__init__é  sJ   € ÝÔ˜DÐ. $Ð.Ð.Ð.¨Ð.Ð.Ð.ÝÔ˜tÐ1 TÐ1Ð1Ð1¨DÐ1Ð1Ð1Ð1Ð1r2   N©rr   rs   rt   r]   r+   r2   r0   r‡  r‡  è  s#   € € € € € ð2ð 2ð 2ð 2ð 2r2   r‡  c                   óÄ   — e Zd ZdZ ee eed¬¦  «         eed¬¦  «         eed¬¦  «         e e	ee
f¦  «        d¬¦  «         eed¬¦  «        ¬¦  «        Zd	„ Zd
„ ZdS )ÚAdjYValueAxisz”A Y-axis applying additional rules.

    Depending on the data and some built-in rules, the axis
    may choose to adjust its range and origin.
    z+When true add percent sign to label values.r'  rI  rK  z8Skip/Keep lowest tick label when true/false.
Or skiplistzadd this to the labels)r)  ÚleftAxisPercentÚleftAxisOrigShiftIPCÚleftAxisOrigShiftMinÚleftAxisSkipLL0ÚlabelVOffsetc                 óŒ   — t          j        | fi |¤Ž d| _        d| _        d| _        d| _        dx| _        | _        d | _        d S )NrÚ  rN   g333333Ã?rô  r   )	rT  r]   rP  rŒ  r�  rŽ  r�  r�  r<  r.  s     r0   r]   zAdjYValueAxis.__init__û  sV   € ÝÔ˜DÐ&Ð& 2Ð&Ð&Ð&ØˆÔØ ˆÔØ$(ˆÔ!Ø$&ˆÔ!Ø34Ð4ˆÔ˜tÔ0ØˆŒˆˆr2   c           	      óÚ  — ddl m}m} | j        | j        }}| j        }t          t          |fd„g d¢¦  «        ¦  «        }|s|g}| j        | j	        }}|r™||z
  |k     r� |||||¬¦  «        dd…         \  }	}
|
|	z
  |k     r^|	|
z   dz  }t          ||dz  z
  |¦  «        }	t          ||dz  z   |¦  «        }
|d	k    r|	d	k     r|
d	z   |	z
  }
d	}	n|dk    r|	dk     r|
|	z
  }
d}	|	|
c| _        | _         || j        | j        d
|| j        || j        ¬¦  «        \  }}| j        }|rÑ|d
         |d         z
  }t          |¦  «        s||z  x}}n||d         z  }||d
         z  }t!          | d|d         ¦  «        }t!          | d|d         ¦  «        }||d         z
  |k     r| j        |z
  | _        |d         |z
  |k     r| j        |z   | _         || j        | j        d
|| j        || j        ¬¦  «        \  }}|d         | _        |d         | _        || _        | j        €|| _        n| j        | _        t)          | j        d	z
  ¦  «        dk     ra|                      ¦   «          | j        | j        }}t          | j        | j        z  ||z
  | j        z  | j        z  ¦  «        }| j        |z
  | _        | j        r;t          | j        ¦  «        r | j        D ]}	 d||<   Œ	# t6          $ r Y Œw xY wd|d<   dS dS )z$Adjusts the value range of the axis.r   )Úfind_good_gridr-  c                 ó   — | |k    S r*   r+   )r-   rd  s     r0   r1   z,AdjYValueAxis._rangeAdjust.<locals>.<lambda>
  s
   €  a¨¢d€ r2   )rÿ   rÖ  ró  rS  é   é	   )r�  ÚgridNr@  r,  ru  rN   )rà  r�  Úpercentr—  r�  ra  rb  r�  rr  r  )Úreportlab.graphics.charts.utilsr“  r-  r\  r]  r5  r5   r>   r;  rP  rG   rK   rŒ  r�  r=  r'   rˆ   rb   r6  ry  r²   rw  r�  rx  rŽ  r‰   r�  r·   )r[   r“  r-  Úy_minÚy_maxrd  r�  r;  rP  rÇ   re  Úymr,   r”   r€  r�  rŒ  Ú_nrl   ÚvMaxÚvMinr-   s                         r0   ry  zAdjYValueAxis._rangeAdjust  s¹  € ð 	JÐIÐIÐIÐIÐIÐIÐIØ”~ t¤~ˆuˆØÔˆÝ• 1Ð*Ð*Ð*¨=¨=¨=Ñ9Ô9Ñ:Ô:ˆØÐ�q�c�!à#'¤>°4Ô3E�=ˆ	Øð 	4˜U U™]¨]Ò:Ð:Ø#�^ E¨5°1¸)ÐDÑDÔDÀRÀaÀRÔH‰FˆB�Ø�B‰w˜Ò&Ð&Ø˜‘e˜S‘[�Ý˜˜M¨#Ñ-Ñ-¨eÑ4Ô4�Ý˜˜M¨#Ñ-Ñ-¨eÑ4Ô4�Ø˜#’:�: " S¢& &Ø˜c™ B™�BØ�B�BØ˜A’X�X " Q¢$ $Ø˜b™�BØ�BØ-/°Ð*ˆDŒN˜DœNàˆu�T”^ T¤^¸1ÀÈ4ÔK_Ðenð  ~Bô  ~Oð  Pñ  Pô  P‰ˆˆ1ØÔ!ˆØð 	TØ�A”$�q˜”t‘)ˆBÝ˜‘:”:ð Ø˜S™&Ð ��R�Rà˜˜Aœ‘Y�Ø˜˜Aœ‘Y�Ý˜˜l¨1¨Q¬4Ñ0Ô0ˆBÝ˜˜l¨1¨R¬5Ñ1Ô1ˆBØ�A�a”D‰y˜2Š~ˆ~°´ÀÑ0C˜tœ~Ø�Œu�R‰x˜"Š}ˆ}¨t¬~ÀÑ/B˜dœnØ�5˜œ¨¬¸qÀAÈtÔOcÐirð  BFô  BSð  Tñ  Tô  T‰DˆAˆqà˜1œˆŒØ˜2œˆŒØˆÔØÔÐ'Ø$%ˆDÔ!Ð!à$(Ô$8ˆDÔ!åˆtŒ~˜cÑ!Ñ"Ô" 4Ò'Ð'Ø×ÒÑ!Ô!Ð!Øœ¨¬�$ˆDÝ�DÔ-¨d¬oÑ=Ø˜$‘Y Ô 9Ñ9¸$¼,ÑFñHô HˆAà!œ^¨aÑ/ˆDŒNàÔð 	Ý�TÔ)Ñ*Ô*ð ØÔ-ð ð �AðØ!˜˜!™˜øÝ%ð ð ð Ø˜ðøøøàˆAˆa‰DˆDˆDð	ð 	s   ËKË
K!Ë K!N)rr   rs   rt   ru   r0  rT  r1  r   r   r   r   r2  r]   ry  r+   r2   r0   r‹  r‹  í  sÑ   € € € € € ðð ð
 ˆw˜jØ&˜, yÐ7dÐeÑeÔeØ+˜|¨HÐ;_Ð`Ñ`Ô`Ø+˜|¨HÐ;UÐVÑVÔVØ&˜, x x°¸?Ð0KÑ'LÔ'Lð  TOð  Pñ  Pô  PØ#�| HÐ3KÐLÑLÔLð
ñ 
ô 
€Hðð ð ð=ð =ð =ð =ð =r2   r‹  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚLogValueAxisc                 ó–   — | j         t          t          | j        ¦  «        t          | j        ¦  «        z
  ¦  «        z  | _        | j        S r–  )r‰   r}  Ú
math_log10r]  r\  r—  rz  s    r0   rZ  zLogValueAxis._calcScaleFactorE  sG   € ð
 !œL­5Ý�t”~Ñ&Ô&­°D´NÑ)CÔ)CÑCñ,Eô ,Eñ EˆÔàÔ Ð r2   c                 ó   — | j         }| j        }t          || j        d| j        ¬¦  «        }t          || j        d| j        ¬¦  «        }|€|}|€|}||k    rt          d| j        j        |fz  ¦  «        ‚|dk    rt          | j        j	        ›d|›d�¦  «        ‚| j
        }|r�t          |¦  «        }t          |¦  «        }t          |¦  «        s||f}|d         pd}	|d         pd}
| j        |	|
z   z
  }||z
  t          |¦  «        z  }||	|z  z  }||
|z  z  }t          |d|z  ¦  «        }t!          |d|z  ¦  «        }|| _        || _        d S )Nr   )rB   z7%s: valueMin=%r should not be greater than valueMax=%r!z: valueMin=z! negative values are not allowed!rN   rÞ  )r9  r:  rI   rý   rB   rL   r¶  r  Ú_LogValueAxis__name__valueMinrr   r@  r£  r'   r‰   r}  rG   rK   r\  r]  )r[   rX  r9  r:  ÚaMinÚaMaxr†  ÚlMinÚlMaxÚa0Úa1r”   rŽ  s                r0   rV  zLogValueAxis._setRangeO  s˜  € Ø”=ˆØ”=ˆÝ˜
 4¤?°1ÀtÔG]Ð^Ñ^Ô^ˆÝ˜
 4¤?°1ÀtÔG]Ð^Ñ^Ô^ˆØÐ¨˜XØÐ¨˜XØ�HÒÐÝÐVÐZ^ÔZhÔZyð  |Dð  ZEñ  Eñ  Fô  Fð  FØ�QŠ;ˆ;ÝÐSWÔSaÔSjÐSjÐSjÐksÐksÐksÐtÑuÔuÐuØÔ"ˆØð 	.Ý˜dÑ#Ô#ˆDÝ˜dÑ#Ô#ˆDÝ˜‘:”:Ð- S¨# X˜sØ�Q”�˜1ˆBØ�Q”�˜1ˆBØ”  R¡Ñ(ˆAØ�t‘)�U 1™XœXÑ%ˆBØ�B�r‘E‰MˆDØ�B�r‘E‰MˆDÝ˜8 B¨¡HÑ-Ô-ˆHÝ˜8 B¨¡HÑ-Ô-ˆHØ!ˆŒØ!ˆŒˆˆr2   c                 óh  — t          | j        ¦  «        x}}t          | j        ¦  «        x}}| j        }|r@|dv rt	          |¦  «        }||k     r|dz   n|}|dv rt	          |¦  «        }||k    r|dz
  n|}g j        }t	          |¦  «        }||k     r|dz  }t	          |¦  «        |z
  dz   }	t          t	          |	| j        z  ¦  «        d¦  «        }||	z  | j        k    r|dz  }|| _        	 ||k    rn||k    r |d|z  ¦  «         ||z  }Œ!||k    r
d|z  | _        ||k    r
d|z  | _        |j	        S )Nrq  rN   rp  TrÞ  )
r£  r\  r]  rB  rP   r  rK   r5  Ú	_powerIncr  )
r[   r9  r~  r:  r  rc  r¨   r,   r¤   r�  s
             r0   r›  zLogValueAxis._calcTickPositionsj  sp  € å$ T¤^Ñ4Ô4Ð4ˆ�4Ý$ T¤^Ñ4Ô4Ð4ˆ�4ØŒ_ˆØð 	7ØÐ'Ð'Ð'Ý˜‘M”M�Ø%& x¢Z Z˜A ™E˜E°Q�ØÐ%Ð%Ð%Ý˜‘M”M�Ø%& x¢Z Z˜A ™E˜E°Q�àŒIˆÝ�‰]Œ]ˆØˆhŠ;ˆ;˜˜a™˜Ý�‰MŒM˜BÑ Ñ"ˆÝ•�A�dÔ'Ñ'Ñ(Ô(¨Ñ+Ô+ˆØˆQ‰3ˆtÔ Ò Ð  ! q¡& !ØˆŒð	Ø�(Š{ˆ{˜EØ�8Š|ˆ|˜Q˜Q˜r 2™v™YœY˜YØ�!‰GˆBð	ð �TŠ>ˆ>¨B°©L˜4œ>Ø�TŠ>ˆ>¨B°©L˜4œ>ØŒzÐr2   c                 ó  — t          | d¦  «        s|                      ¦   «          | j        }t          | d¦  «        �sAg j        }t	          | j        ¦  «        }t	          | j        ¦  «        dz   }t          |¦  «        }| j        }|dk    r|dt          | j
        ¦  «        z  }d}| j
        dk    rd}||k     rOt          || j
        ¦  «        D ].}	||	z  d|z  z  }
|
| j        k    r|
| j        k     r ||
¦  «         Œ/||z  }||k     °Onkt          | j
        dz   |dz
  ¦  «        }|r||z  dk    r||z  }n	|dz  }|°d}t          |¦  «        }	 d|z  }
|
| j        k    rn|
|vr ||
¦  «         ||z  }Œ&|j        | _        | j        | _        |S )Nrb   r‘  rN   rÞ  r@  r   )rh   ri   rb   r  r£  r\  r]  Úroundr­  r}  rð   r    rG   r  r‘  )r[   rú   r,   r9  r:  r¤   r¨   Úfacr|   rª  rR   Úngs               r0   rõ   zLogValueAxis._calcSubTicks†  sà  € Ý�t˜MÑ*Ô*ð 	%Ø×"Ò"Ñ$Ô$Ð$ØÔˆÝ�tÐ,Ñ-Ô-ñ  	-Ø”	ˆAÝ! $¤.Ñ1Ô1ˆHÝ! $¤.Ñ1Ô1°!Ñ3ˆHÝ�x‘”ˆBØ”ˆAØ�!ŠtˆtØ�5 ¤Ñ1Ô1Ñ1�Ø�Ø”? bÒ(Ð(°!¨%Ø˜8’m�mÝ" 5¨¬Ñ9Ô9ð !ð !˜Ø ™E 2 r¡6™N˜Ø˜tœ~Ò-Ð-°!°d´nÒ2DÐ2DØ˜A˜a™DœD˜DøØ˜!‘G�Bð ˜8’m�møõ ˜œ¨Ñ*¨1¨Q©3Ñ/Ô/�Øð Ø˜B™ ’{�{Ø˜R™˜ØØ˜!‘G�Bð	 ð ð �AÝ˜8‘_”_�ðØ˜B™�AØ˜DœNÒ*Ð*¨EØ �|�|Ø˜˜!™œ˜Ø˜!‘G�Bðð #$¤*ˆDÔØÔ.ˆÔØˆ
r2   N)rr   rs   rt   rZ  rV  r›  rõ   r+   r2   r0   r¡  r¡  C  sP   € € € € € ð!ð !ð !ð"ð "ð "ð6ð ð ð8&ð &ð &ð &ð &r2   r¡  c                   ó   — e Zd Zd„ ZdS )ÚLogAxisTickLabellerc                 ó„   — t          |¦  «        }t          |dk     r|dz
  n|dz   ¦  «        }|dk    rdS |dk    rdS d|z  S )Nr   çü©ñÒMbP?Ú1rN   Ú10z10<sup>%s</sup>)r£  rP   )r[   rn   rÑ  r7   s       r0   rp   zLogAxisTickLabeller.__call__°  sU   € Ý�uÑÔˆÝ˜1˜Qš3˜3��%‘� A e¡GÑ,Ô,ˆØˆaŠ4ˆ4˜˜ØˆaŠ4ˆ4˜˜Ø  1Ñ$Ð$r2   N)rr   rs   rt   rp   r+   r2   r0   r³  r³  ¯  s#   € € € € € ð%ð %ð %ð %ð %r2   r³  c                   ó   — e Zd ZdZd„ ZdS )ÚLogAxisTickLabellerSzZsimple log axis labeller tries to use integers
    and short forms else exponential formatc                 óö   — t          |¦  «        }t          |dk     r|dz
  n|dz   ¦  «        }|dk    rdS |dk    rd|dz  z   ndd|z    dz  z   dz   }d|z  }t          |¦  «        t          |¦  «        k     r|n|S )Nr   rµ  r¶  rt  z0.rN   z%.0e)r£  rP   r?   )r[   rn   rÑ  r7   Úpr‘   Úses          r0   rp   zLogAxisTickLabellerS.__call__º  s‘   € Ý�uÑÔˆÝ˜1˜Qš3˜3��%‘� A e¡GÑ,Ô,ˆØˆaŠ4ˆ4˜˜Ø˜1š˜ˆC��#‘‰IˆI $¨!¨A©#¨¨s©
Ñ"3°CÑ"7ˆØ�e‰^ˆÝ˜‘W”W�S ™VœV’^�^ˆrˆr¨Ð*r2   Nr.  r+   r2   r0   r¹  r¹  ·  s-   € € € € € ð/ð /ð+ð +ð +ð +ð +r2   r¹  c                   ó   — e Zd Zd„ ZdS )ÚLogAxisLabellingSetupc                 ó>  — t           �‚t          t          ¦  «        | _        | j        dk    r%d| j        _        d| j        _        d| j        _        n$d| j        _        d| j        _        d| j        _        t          ¦   «         | _	        d S t          ¦   «         | _	        d S )NrN   r7   rÕ  r   r�  )r#   r   r"   rN  rý   r×  r  rØ  r³  r6  r¹  rz  s    r0   r]   zLogAxisLabellingSetup.__init__Ã  s†   € ÝÐ)Ý1µ&Ñ9Ô9ˆDŒKØŒ Ò!Ð!Ø(+�”Ô%Ø!#�””Ø!"�””�à(+�”Ô%Ø!"�””Ø!#�””Ý#6Ñ#8Ô#8ˆDÔ Ð Ð å#7Ñ#9Ô#9ˆDÔ Ð Ð r2   Nr‰  r+   r2   r0   r¾  r¾  Â  s#   € € € € € ð:ð :ð :ð :ð :r2   r¾  c                   ó2   — e Zd Z ee¬¦  «        Zd„ Zd„ ZdS )ÚLogXValueAxis©r)  c                 ón   — t                                | ¦  «         t                               | ¦  «         d S r*   )r·  r]   r¾  rz  s    r0   r]   zLogXValueAxis.__init__Õ  ó0   € Ý×Ò˜DÑ!Ô!Ð!Ý×&Ò& tÑ,Ô,Ð,Ð,Ð,r2   c                 óì   — d}| j         s
J |¦   «         ‚|€d}|dk    r$| j        | j        t          | j        ¦  «        z  z
  S | j        | j        t          |¦  «        t          | j        ¦  «        z
  z  z   S ©zúConverts a numeric value to a Y position.

        The chart first configures the axis, then asks it to
        work out the x value for each point when plotting
        lines or bars.  You could override this to do
        logarithmic axes.
        rÅ  Nr   ri  )rR  rl   r—  r£  r\  ©r[   rÑ  Úmsgs      r0   rj   zLogXValueAxis.scaleÙ  ó   € ð BˆØÔÐ$Ð$ Ñ$Ô$Ð$Øˆ=ØˆEØ�BŠ;ˆ;Ø”7˜TÔ.µ¸D¼NÑ1KÔ1KÑKÑKÐKØŒw˜Ô*­j¸Ñ.?Ô.?Å*ÈTÌ^ÑB\ÔB\Ñ.\Ñ]Ñ]Ð]r2   N)rr   rs   rt   r0  r·  r2  r]   rj   r+   r2   r0   rÁ  rÁ  Ò  sI   € € € € € Øˆw˜JÐ'Ñ'Ô'€Hð-ð -ð -ð^ð ^ð ^ð ^ð ^r2   rÁ  c                   ó2   — e Zd Z ee¬¦  «        Zd„ Zd„ ZdS )ÚLogYValueAxisrÂ  c                 ón   — t                                | ¦  «         t                               | ¦  «         d S r*   )rT  r]   r¾  rz  s    r0   r]   zLogYValueAxis.__init__ì  rÄ  r2   c                 óì   — d}| j         s
J |¦   «         ‚|€d}|dk    r$| j        | j        t          | j        ¦  «        z  z
  S | j        | j        t          |¦  «        t          | j        ¦  «        z
  z  z   S rÆ  )rR  rm   r—  r£  r\  rÇ  s      r0   rj   zLogYValueAxis.scaleð  rÉ  r2   N)rr   rs   rt   r0  rT  r2  r]   rj   r+   r2   r0   rË  rË  ê  sI   € € € € € Øˆw˜JÐ'Ñ'Ô'€Hð-ð -ð -ð^ð ^ð ^ð ^ð ^r2   rË  r#  )YÚ__version__ru   Úmathr   r£  Ú	functoolsr   Úreportlab.lib.validatorsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Úreportlab.lib.attrmapÚreportlab.libr   Úreportlab.graphics.shapesr   r   r   r   r   r   r   r   Úreportlab.graphics.widgetbaser   r   Ú$reportlab.graphics.charts.textlabelsr    r!   r"   r#   r™  r$   Ú reportlab.graphics.widgets.gridsr%   Úreportlab.lib.colorsr&   Úreportlab.lib.utilsr'   rD   rI   rL   rS   rU   rw   r—   r¬   rº   r&  r4  rž  r¡  r£  rÇ  rÎ  r  r,  r´  r1  r·  râ  rä  rê  rì  rR  r5  rû  rT  r]  r‡  r‹  r¡  r³  r¹  r¾  rÁ  rË  r+   r2   r0   ú<module>rÚ     s{  ðð €ð	€ð< %Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ðGð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð $Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ð }Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø &Ð &Ð &Ð &Ð &Ð &Ø %Ð %Ð %Ð %Ð %Ð %ð
Gð 
Gð 
Gð 
Gðað að að aðbð bð bð bðð ð ð"ð "ð "ð "ð "ñ "ô "ð "ð<Gð Gð Gð Gð Gñ Gô Gð GðRCð Cð Cð Cð Cñ Cô Cð CðJ7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ð$jð jð jð jð jˆVñ jô jð jðXð ð ð ð ˆhñ ô ð ðB6ð B6ð B6ð B6ð B6�6ñ B6ô B6ð B6ðHeð eð eðeð eð eð;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ðzð ð ð ð ˆgñ ô ð ð,oð oð oð oð o�G˜Lñ oô oð oðboð oð oð oð o�G˜Lñ oô oð oðb0ð 0ð 0ð 0ð 0ñ 0ô 0ð 0ð /Ð.Ð ðR	1ð R	1ð R	1ð R	1ð R	1�ñ R	1ô R	1ð R	1ðhIð Ið Ið Ið I�˜ñ Iô Ið Iðj TÐ
SÐ
S€Ø;Ð;Ð;€ðð ð ðð ð ð ð ˜Yñ ô ð ð* /Ð.Ñ0Ô0Ð à
Y€ðzð zð zð zð z˜:ñ zô zð zðxIð Ið Ið Ið I�˜ñ Iô Ið IðV>ð >ð >ð >ð >ñ >ô >ð >ðD2ð 2ð 2ð 2ð 2�] :ñ 2ô 2ð 2ð
Tð Tð Tð Tð T�Jñ Tô Tð Tðlið ið ið ið i�9ñ iô ið iðX%ð %ð %ð %ð %˜,ñ %ô %ð %ð	+ð 	+ð 	+ð 	+ð 	+˜<ñ 	+ô 	+ð 	+ð:ð :ð :ð :ð :ñ :ô :ð :ð ^ð ^ð ^ð ^ð ^�LÐ!6°zñ ^ô ^ð ^ð0^ð ^ð ^ð ^ð ^�LÐ!6°zñ ^ô ^ð ^ð ^ð ^r2   