%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/reportlab/graphics/charts/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/reportlab/graphics/charts/__pycache__/axes.cpython-312.pyc

�

׸�e�i���dZdZddlmZddlmZmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZmZddl�ddlmZddlmZmZmZmZmZmZmZm Z ddl!m"Z"m#Z#dd	l$m%Z%m&Z&m'Z'm(Z(dd
l)m*Z*ddl+m,Z,ddl-m.Z.dd
l/m0Z0dNd�Z1dNd�Z2dNd�Z3d�Z4Gd�d�Z5Gd�d�Z6Gd�d�Z7Gd�d�Z8Gd�de"�Z9Gd�de&�Z:Gd�d e9�Z;d!�Z<d"�Z=Gd#�d$�Z>Gd%�d&e>�Z?Gd'�d(e>e;�Z@Gd)�d*e?e;�ZAGd+�d,�ZBd-�ZCGd.�d/e9�ZDGd0�d1e>eD�ZEgd2�ZFgd3�ZGd4�ZHGd5�d6e�ZIeI�ZJd7ZKGd8�d9eE�ZLGd:�d;e?eD�ZMGd<�d=�ZNGd>�d?eNeE�ZOGd@�dAeM�ZPGdB�dCeD�ZQGdD�dEeB�ZRGdF�dGeB�ZSGdH�dI�ZTGdJ�dKeQeTeE�ZUGdL�dMeQeTeM�ZVy)Oz3.3.0aCollection 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)�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�r�t|dd�r'|r|||fd�}n|fd�}tt|fd�|��}ttt|D�cgc]}|D�cgc]}|��|��	c}��c}��}t	|�dk(r|S|tt||���}|r|||�|�S|Scc}wcc}w)Nrc��||||�S�N�)�T�x�special�funcs    �@/usr/lib/python3/dist-packages/reportlab/graphics/charts/axes.py�<lambda>z"_findMinMaxValue.<locals>.<lambda>5s��g�a��$�6G��c��||Sr)r*)r+r,s  r/r0z"_findMinMaxValue.<locals>.<lambda>7s
��A�a�D�r1c�,�tt||��Sr))�list�map)�e�fs  r/r0z"_findMinMaxValue.<locals>.<lambda>8s���c�!�A�h��r1)r&r4r5�filter�len)�Vr,�defaultr.r-�extraMinMaxValuesr7�rs        r/�_findMinMaxValuer>2s����Q�q�T�!�W�~���7��G�A�� �A�
�s�a�/��2�
3���V�C�!�D�Q�Q�8��!�-�!�8�D�
E�F�A�
�1�v�q�y��.��T�#�d�1�+�
��A�.?�4��&�'��*�F�Q�F��9��Ds�	B4�B/�B/�!B4�/B4c�,�t|||t||��S)zfind minimum over V[i][x]�r-r<)r>�min�r:r,r;r-r<s     r/�_findMinrC>s���A�a���G�N_�`�`r1c�,�t|||t||��S)zfind maximum over V[i][x]r@)r>�maxrBs     r/�_findMaxrFBs���A�a���G�O`�a�ar1c�D�|D]}	t|�|k7ry�y#YyxYw)ztrue if all values are intr���int)�values�vs  r/�_allIntrMFs4��
���	��1�v�q�y��y��

��	��s��c��eZdZdZd�Zd�Zy)�AxisLabelAnnotationaKCreate 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� �||_||_yr)��_v�_kwds��selfrL�kwdss   r/�__init__zAxisLabelAnnotation.__init__X��������
r1c�v�|jj�}|jdt�}|jdd�}t	|d�s|j�|r|jnd�|j�}|jr|j}|}n|}|j}||d<||d<|di|��S)	N�
labelClass�
scaleValueT�_tickValuesc��|Sr)r*�r,s r/r0z.AxisLabelAnnotation.__call__.<locals>.<lambda>bs��a�r1r,�yr*)rS�copy�popr�hasattr�_pseudo_configure�scalerR�isYAxis�_x�_y)rU�axisrVrZr[�svr,r_s        r/�__call__zAxisLabelAnnotation.__call__\s����z�z��� ���X�X�l�5�1�
��X�X�l�4�0�
��t�M�*��"�"�$�7�J�d�j�j�K����
A���<�<����A��A��A����A���S�	���S�	��!�D�!�!r1N��__name__�
__module__�__qualname__�__doc__rWrjr*r1r/rOrOOs����"r1rOc��eZdZdZd�Zd�Zy)�AxisLineAnnotationaCreate 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� �||_||_yr)rQrTs   r/rWzAxisLineAnnotation.__init__zrXr1c���|jj�}|jdd�}|jdd�}|jdd�}|jr|j}|j
}n|j
}|j}|jdd�}|jdd�}	|�|	�Ft
t
|dd�d	d�}
|
rt|
d
�r|
�}
|
r|�|
d}|	�|
d}	n|�d}|	�d}	|jd
|j�|z}|jdd�|z}t||�t||�}}|jdd�}
|j}|sd�|_	|j}|r||z}n|r||z}|j||z
|	|z
|jdd��}t|d�s|j�|j|���|ks�|kDr|
s		||_y�|kr|�n|��fd�|_||�}|j�D]\}}t!|||��	||_|S#||_wxYw)Nr[T�	endOffsetF�startOffset�start�end�joinAxis�getGridDimsrjrrH�hi�lo�drawAtLimitc��|Sr)r*r^s r/r0z-AxisLineAnnotation.__call__.<locals>.<lambda>�s��1�r1�parentr\c����Sr)r*)r,�ds �r/r0z-AxisLineAnnotation.__call__.<locals>.<lambda>�s���q�r1)rSr`rarerfrg�getattrrb�_lengthrArE�
_get_line_posrR�_getLineFuncrc�items�setattr)rUrhrVr[rtru�offs�d0�sr6�dimrzr{r|�oaglprLr.�L�kr�s                   @r/rjzAxisLineAnnotation.__call__~sK����z�z��� ���X�X�l�4�0�
��H�H�[��/�	��h�h�}�U�3���<�<��7�7�D����B��7�7�D����B��H�H�W�T�"���H�H�U�4� ���9��	��'�$�z�$�7�
�d�K�C��w�s�:�.��e����9�#�a�&�a��9�#�a�&�a��9�!�a��9�!�a�
�X�X�d�4�<�<�
(��
+��
�X�X�d�1�
�b�
 ���"�R�j��R���2���h�h�}�U�3���"�"���!,�D��	'����A����F�����F���$�$�Q�t�V�A�d�F�4�8�8�H�T�3J�K�D��4�
�.��&�&�(��"�"�1�%�A���t�q��t�"�4�"'�D���R�4��A��A�%0��"��Q��A��z�z�|�
���!���!�A��
�"'�D�����"'�D��s�2A=I�8AI�	INrkr*r1r/rqrqms����4r1rqc��eZdZdZd�Zd�Zy)�AxisBackgroundAnnotationaCreate 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� �||_||_yr))�_colorsrS)rU�colorsrVs   r/rWz!AxisBackgroundAnnotation.__init__�s�������
r1c
��|j}|sy|jj�}|j}|r|j}|j
}n|j
}|j}|j
dd�}|j
dd�}|�|�Ftt|dd�dd�}	|	rt|	d�r|	�}	|	r|�|	d}|�|	d}n|�d}|�d}t|d�s|j�t|dd�}
|
syt�}t|�}|j|
d�}
tdt|
��D�]}|j|
|�}||dz
|z}|r�|r|
}|}||
z
}||z
}n|
}|}||
z
}||z
}t|t�rt!|||||d�	�}n�t|t �r<t!||||�}|j"D]}|d
vs�t%||t||��� nLt|t&�r<t'||||�
�}|j"D]}|d
vs�t%||t||��� |j)�|}
��|S)NrvrwrxryrjrrHr\)�	fillColor�strokeColor)r,r_�width�height)r�rSr`rerfrgrar�rbrcrr9r��range�
isinstancer%r�__dict__r�r$�add)rUrhr�rVrer�r�r�r6r��tv�G�ncolors�v0�i�v1�cr_r,r�r�r=r�s                       r/rjz!AxisBackgroundAnnotation.__call__�sf�������v��z�z��� ���,�,����7�7�D����B��7�7�D����B��H�H�W�T�"���H�H�U�4� ���9��	��'�$�z�$�7�
�d�K�C��w�s�:�.��e����9�#�a�&�a��9�#�a�&�a��9�!�a��9�!�a��t�M�*��"�"�$�
�T�-��
-���6��G���f�+��
�
�
��1��
&���q��R��!�	�A��#�#�B�q�E�*�B���!��W�}�%�A����A��A���U�F��a�C�E��A��A��r�E�E��q�S�F��a��&��Q�q��v��d�K�A���$�'��Q�q��v�.�A��Z�Z�6���$>�>�#�A�a���!��5�6� ��*�-�"�Q���f�E�A��Z�Z�6���$>�>�#�A�a���!��5�6����a���B�7	�8�r1Nrkr*r1r/r�r��s����:r1r�c�"�eZdZdZd�Zd�Zd�Zy)�TickLUz$lookup special cases for tick valuesc�@�|jdd�|_||_y)N�accuracy�:�0�yE>)rar�r+)rUr+rVs   r/rWzTickLU.__init__�s������D�1��
���r1c�j�|j}|jD]\}}t||z
�|ks�yy�NTF)r�r+�abs�rU�tr�r,rLs     r/�__contains__zTickLU.__contains__�s:���=�=���6�6�	�C�A�a��1�Q�3�x�� ��	�r1c��|j}|jD]$\}}t||z
�|jks�"|cStd|z��)Nzcannot locate index %r)r�r+r��
IndexErrorr�s     r/�__getitem__zTickLU.__getitem__sN���=�=���6�6�	�C�A�a��1�Q�3�x��
�
�%���	��1�A�5�6�6r1N)rlrmrnrorWr�r�r*r1r/r�r��s��.���7r1r�c��eZdZd�Zd�Zd�Zd�Zd�Zdd�Zdgifd�Z	ddgfd	�Z
ddgfd
�Zdd�Zd�Z
ee
�Z
d
�Zee�Zdd�Zd�Zd�Zy)�_AxisGc�D�|j|�}	|d}|S#Y|SxYw�Nr)rd)rUrLs  r/r�z_AxisG._get_line_poss3���J�J�q�M��	��!��A����	����s��c�t�|j|�}t||j|z||j|z�Sr))r�rrg)rUr,rvrws    r/�_cxLinez_AxisG._cxLines3�����q�!���A�t�w�w����4�7�7�S�=�9�9r1c�t�|j|�}t|j|z||j|z|�Sr))r�rrf)rUr_rvrws    r/�_cyLinez_AxisG._cyLines3�����q�!���D�G�G�e�O�Q����#�
�q�9�9r1c	���|j|�}|j|z}|j|z}t||�t||�}}||z}t	|||||z|||zgd��S�NrH)�strokeLineJoin)r�rgrArEr)	rUr,rvrw�_3d_dx�_3d_dy�y0�y1�x1s	         r/�	_cxLine3dz_AxisG._cxLine3dsl�����q�!��
�W�W�u�_��
�W�W�s�]���R���C��2�J�B��
��Z����2�b��F��2�b��i�8��J�Jr1c���|j|�}|j|z}|j|z}t||�t||�}}||z}t	||||z|||z|gd��Sr�)r�rfrArEr)	rUr_rvrwr�r��x0r�r�s	         r/�	_cyLine3dz_AxisG._cyLine3d$sl�����q�!��
�W�W�u�_��
�W�W�s�]���R���C��2�J�B��
��Z����A�b��i��2�f�9�R�8��J�Jr1Nc��t|dd�}|�>t|dd�}|jxr|jxs|j}|||||fd�S|jxr|jxs|j
}|||fd�S)Nr�r�c��||||||��S)N)r�r�r*)rLr�r6r7r�r�s      r/r0z%_AxisG._getLineFunc.<locals>.<lambda>1s��a�PQ�RS�TU�]c�kq�Nr�r1c��||||�Sr)r*)rLr�r6r7s    r/r0z%_AxisG._getLineFunc.<locals>.<lambda>4s��!�A�a��(�r1)r�rer�r�r�r�)rUrvrwr~r�r�r7s       r/r�z_AxisG._getLineFunc,sx������.�����V�H�T�2�F����/����A�4�>�>�A�$��q��f�r�r����-����=����A�$��q�:�:r1c
���|j|||
�}
t|d�s|j��r|jxr�fd�xs�fd�}nd}|jD]|}|
|�}|r	||�r�||_||_||_||_||_	|	|_
||vr(||j�D]\}}t|||��|j|��~y)Nr\c� ��|j�vSr))r���l�excludes �r/r0z#_AxisG._makeLines.<locals>.<lambda>;s���a�d�d�g�o�r1c� ��|j�vSr))r�r�s �r/r0z#_AxisG._makeLines.<locals>.<lambda>;s���Q�T�T�U\�_�r1)r�rbrcrer\r��strokeWidth�strokeDashArrayr��
strokeLineCap�strokeMiterLimitr�r�r�)rU�grvrwr�r�r�r�r�r�r~r��specialsr.�exfr�r��arLs           `       r/�
_makeLinesz_AxisG._makeLines6s����� � ��s�6�2���t�M�*��"�"�$���,�,�>�$=�]�C\�C��C��!�!�	�A���G���3�q�6�8� +��
� +��
�$3��!�#1�� �"/���%5��"���=�'��{�0�0�2�'���!���!�A��'����a��	r1c��|j}|jxsd}|r�|r�|jr�|j}|j}|�|�.|rt|d�r|�}|r|�|d}|�|d}n|�d}|�d}|s|r{|jr
|j}	n|j}	|j|||	z
||	z
|||j|j|j|j||t|di���|j|||g��y)�)this is only called by a container objectrNrjrH�
_gridSpecials)r~r�r�)r�)�gridStrokeColor�gridStrokeWidth�visibleGrid�	gridStart�gridEndrbrerfrgr��gridStrokeDashArray�gridStrokeLineJoin�gridStrokeLineCap�gridStrokeMiterLimitr��_makeSubGrid)
rUr�r�r~r�r��wr�r6r�s
          r/�makeGridz_AxisG.makeGridLs;��� � ��� � �%�A����t�'�'����A����A��y�A�I��7�3�z�2��%�C���y�c�!�f�!��y�c�!�f�!��y�a�!��y�a�!��A��<�<�����!�W�W�d�����!�D�&��4���!�D�4L�4L�T�Md�Md�ei�e{�e{�}A�}V�}V�^d�mt�~E�FJ�KZ�[]�~^��_����!�C��r��2r1c
�D�t|dd�r|jdkDsy|j}|jxsd}|r|sy|j}|j
}|�|�.|rt
|d�r|�}|r|�|d}|�|d}n|�d}|�d}|s|r�|jr
|j}	n|j}	|j�}
	|j|||	z
||	z
|||j|j|j|j||��|
|_yy#|
|_wxYw)r��visibleSubGridrNrjrH)r~r�)r��
subTickNum�subGridStrokeColor�subGridStrokeWidth�subGridStart�
subGridEndrbrerfrg�
_calcSubTicksr��subGridStrokeDashArray�subGridStrokeLineJoin�subGridStrokeLineCap�subGridStrokeMiterLimitr\)rUr�r�r~r�r�r�r�r6r��otvs           r/r�z_AxisG._makeSubGridbsL����-�a�0�T�_�_�Q�5F���#�#���#�#�(�q���Q�������O�O���9��	��w�s�:�.��e����9�#�a�&�a��9�#�a�&�a��9�!�a��9�!�a����|�|�D�G�G�T����$��$�$�&�C�
'�����!�D�&��4���!�D�4O�4O�PT�Pj�Pj�ko�lE�lE�FJ�Fb�Fb�jp�y@��A�#&�� ���$'�� �s
�A
D�	Dc�z�|�%|j|jf|j}|�||jz}||fSr))rfrgrer�)rUrvrws   r/ryz_AxisG.getGridDims|s=���=�4�7�7�4�7�7�"3�D�L�L�"A�%��;�e�D�L�L�0���S�y�r1c�t�t|dd�dk(ry|jj}|ddk(xs|dddk(S)N�
_dataIndexrHTr�Y��AdjY�r��	__class__rl�rU�acns  r/rez_AxisG.isYAxis�sA���4��T�*�A�-�d��n�n�%�%���1�v�s�{�-�c�"�1�g�v�o�-r1c�t�t|dd�dk(ry|jj}|ddk(xs|dddk(S)Nr�rT�X��NormalDateXr�r�s  r/�isXAxisz_AxisG.isXAxis�sB���4��T�*�A�-�d��n�n�%�%���1�v�s�{�5�c�#�2�h�
�5�5r1c�^�|�
t|dg�|D]}|j||���y)N�annotations)r�r�)rUr��Ar,s    r/�addAnnotationsz_AxisG.addAnnotations�s0���9�g�d�=��4��	�A�
�E�E�!�D�'�N�	r1c��t|dg�dd}i}dD]]}gj}gj}|D] }t||d�r	||��||��"|j||<|j|dd�_|dxx|z
cc<|S)Nr)�early�
beforeAxis�	afterAxis�beforeTicks�
afterTicks�beforeTickLabels�afterTickLabels�laterr)r��append�__self__)rUr�DrL�R�Pr�s       r/�_splitAnnotationsz_AxisG._splitAnnotations�s����D��r�*�1�-����*�	�A��	�	�A��	�	�A��
���1�Q�q�>��a�D��a�D�	
�
�:�:�A�a�D��:�:�A�a�D�	�	
�&�	�Q��	��r1c�\�t�}|j�}|j||d�|jr�|j||d�|j	|j��|j||d�|j||d�|j	|j
��|j||d�|j||d�|j	|j��|j||d�|j||d�|S)	Nrrr	r
rrr
r)rrr�visibler��makeAxis�	makeTicks�makeTickLabels)rUr�rs   r/�drawz_AxisG.draw�s���G���"�"�$�����A�a��j�)��<�<�����!�L�/�2�
�E�E�$�-�-�/�"�����!�K�.�1�����!�M�"2�3�
�E�E�$�.�.�"�#�����!�L�/�2�����!�$6�"7�8�
�E�E�$�%�%�'�(�����!�$5�"6�7����A�a��i�(��r1r)�NN)rlrmrnr�r�r�r�r�r�r�r�r�ryre�propertyrrrrr*r1r/r�r�s����:�:�K�K�;�BF�OQ�[]��,!��R�3�,!%�D��'�4�
.��w��G�6��w��G��
�$r1r�c�6�eZdZeeeed����Zd�Zy)�CALabelz?where in the category range [0,1] the labels should be anchored��desc)�BASE�labelPosFracc�T�tj|fi|��|jd��y)N��?)r")r rW�_setKeywords�rU�kws  r/rWzCALabel.__init__�s+�����$�$��$����"�	�	r1N)	rlrmrn�AttrMapr �AttrMapValuer�_attrMaprWr*r1r/rr�s���H�#�H�3t�u�
�H�r1rc
���eZdZdZdZedcideed���deed���deed	���d
eed���deed
���deed���dee	d���dee
d���deeddd�d���deeddd�d���deed���deed���dee	d���d ee
d!���d"eeddd�d#���d$eeddd�d%���d&eed'���d(eed)���d*eed+���d,eed-���d.ed/d0���d1ee
d2���d3ed/d4���d5eed6���d7eed8���d9eed:d;d<�d=��d>eed?d@dAdB�dC���dDeedE���dFeedG���dHee	dI���dJeedK���dLeedM���dNed/dO���dPeedQ���dReedS���dTeedUdVdWdX�dY��dZeed[����Zd\�Zd]�Zddd^�Zd_�Zd`�Zda�Zdb�Zy/)e�CategoryAxisz+Abstract category axis, unusable in itself.rHr�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.�
categoryNameszList of category names.rx�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�lowrh�axispmv�*Like joinAxisMode, but for the axis labels�	tickShiftzTick 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�(�|jjdk7sJd��d|_d|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_td|_td	|_td
x|_|_tdx|_|_tdx|_|_d
|_td|_td	|_dx|_|_td
|_td|_td|_t7t8�|_d|_d|_d|_ d|_!d|_"d|_#d|_$d|_%d|_&d|_'d|_(d|_)d|_*y)Nr,z(Abstract Class CategoryAxis Instantiated�2�drrHFr�r�r�r�r���?rhrO)+r�rlrfrgr��	_catCountrr.r0r2r�rDr�rr�r�r�r�r�r�r�r�r�r�r�r�r�rrrFrHrxrJ�joinAxisModerRrLrN�_labelTextFormatrWr\r]r_ra�rUs r/rWzCategoryAxis.__init__�s����~�~�&�&��6�b�8b�b�6����������������������������!������)�-�8���-�.?�@���8F�GW�8X�X���$�"5�6D�_�6U�U����!3�<J�K]�<^�^��!�D�$9�#���-�m�<���#1�2C�#D�� �(,�,�����,�-=�>���+�O�<��� .�/A� B���-�g�6���"�����
���� ���#��� !�����
�!%��������
���
������r1c�d�t|�|_t|�|_t|�|_yr)��floatrfrgr��rUr,r_�lengths    r/�setPositionzCategoryAxis.setPosition#�#����(�����(����V�}��r1c���tttt|���|_|xs@|j
|jz
|jz
t|jxsd�z|_	|j�|jdk(rEt|j�D��cgc]}t|D�cgc]}||��	c}��� c}}|_yycc}wcc}}w)NrHrU)rEr4r5r9ror�r\r]ru�	_barWidth�_calcTickmarkPositionsrRr��sum�_pmv)rU�multiSeries�barWidthr��seriess     r/�	configurezCategoryAxis.configure)s����T�#�c�+�"6�7�8���!�f�t�|�|�D�J�J�'>�t�z�z�'I�5�QU�Q_�Q_�Qd�cd�Ke�&e����#�#�%�����*�MR�SW�Sa�Sa�Mb�c���k�B�F�f�Q�i�B�C�c�D�I�+��B��cs�(C�6C�	C�Cc��|j}|jr"t|�D�cgc]}|dz��	c}|_y|jrttd|��|_ytt|dz��|_ycc}w)Nr$���rH)rorWr�r\rLr4)rU�nr�s   r/r|z#CategoryAxis._calcTickmarkPositions0sc���N�N���>�>�/4�Q�x�8�!��#��8�D���$�$�#'��b���#4�� �#'��a��c�
�#3�� �� 9s�A?c�B�|jr|j|z
dz
}|S�NrH)rLro�rU�idxs  r/�_scalezCategoryAxis._scale:s"��� � ����s�(:�1�(<�#��
r1c�<�|j|�|jfS)z/Returns the position and width in drawing units��loScaler{r�s  r/rdzCategoryAxis.scale>s�����S�!�4�>�>�2�2r1c�D�|j|�d|jzzS)z-Returns the bar mid position in drawing unitsr$r�r�s  r/�midScalezCategoryAxis.midScaleBs���|�|�C� �3�t�~�~�#5�5�5r1r*r))rlrmrnro�_nodocr(r)rrr	rr
rrrr*rWrxr�r|r�rdr�r*r1r/r,r,�s��1�
�F��&
��y�/P�Q�&
�"�9�3P�Q�&
�$�I�4R�S�&
�%�Y�5T�U�	&
�
#�9�3P�Q�&
�#�8�2Q�R�
&
�#�=�7V�W�&
�'�'<�Cc�d�&
�%�U�1�Q�q�\�7\�]�&
�&�e�A�a��l�8^�_�&
�(��6\�]�&
�'�x�6L�M�&
�'�}�;Q�R�&
�+�+@�Gh�i�&
�)��q��1��;e�f�&
� *�%��!�A�,�<g�h�!&
�" ,�H�:e�f�#&
�$!��6[�\�%&
�&�~�4W�X�'&
�($�I�4c�d�)&
�*�d�)E�F�+&
�,%�%:�AZ�[�-&
�. ��+D�E�/&
�0#�>�8d�e�1&
�2(�	�8]�^�3&
�4�U�:�i�
�F�Gm�n�5&
�6%�U�6�%��	�%J�Q}�~�7&
�8!��1G�H�9&
�:'�~�<Z�[�;&
�<'�}�;Y�Z�=&
�>�X�,X�Y�?&
�@�X�,U�V�A&
�B#�4�-B�C�C&
�D�h�-Y�Z�E&
�F�h�-V�W�G&
�H ��f�U�6�(� C�Dm�n�I&
�J%�%5�<a�b�K&
�H�P4�l%�d�4��3�6r1r,c�X�|jsJd|jjz��y)Nz/Cannot connect to other axes (%s), but Y- ones.)rer�rl�rhs r/�_assertYAxisr�F�#���<�<�d�J�T�^�^�Md�Md�d�d�<r1c�X�|jsJd|jjz��y)Nz/Cannot connect to other axes (%s), but X- ones.)rr�rlr�s r/�_assertXAxisr�Hr�r1c�R�eZdZdZed��Zed��Zd�Zd
d�Zd�Z	d�Z
d
d	�Zy)�_XTicksrc�0�t|d|j�S)NrX)r�r�rrs r/�actualTickStrokeWidthz_XTicks.actualTickStrokeWidthN����t�-�d�.>�.>�?�?r1c�0�t|d|j�S)NrZ)r�r�rrs r/�actualTickStrokeColorz_XTicks.actualTickStrokeColorRr�r1c�6�t|dd�}|r|||||�y|s|rz|j}|j}|r|r|s||z}n	|r|s||z}|j||||j||j
|j|j|j�	yy)Nri)	r�r��_tickTweaksr�r�r�r�r�r�)rU�tU�tDr��itd�sW�tWs       r/�_drawTicksInnerz_XTicks._drawTicksInnerVs����d�?�4�0�����R��1��
�2��+�+�B��!�!�B���b��B��B����B��B��O�O�A�b�"��T�%?�%?��4�CW�CW�X\�Xk�Xk�lp�l~�l~�@D�@U�@U�
V�r1Nc�`�|xs
t�}|jr|j|||�|Sr))rr0r�)rUr�r�r�s    r/�
_drawTicksz_XTicks._drawTicksds-��
�L�������� � ��B�q�)��r1c���t|dd�rE|jdkDr5|j�}	d|_|j	|||�|`||_yyy#|`||_wxYw)N�visibleSubTicksrrH)r�r�r��_subTickingr�r\)rUr�r�r�r�s     r/�
_drawSubTicksz_XTicks._drawSubTicksjsp���4�)�!�,�����1B��$�$�&�C�
'�#$�� ��$�$�R��1�-��$�#&�� �2C�,���$�#&�� �s�A�Ac�&�|j}	|jt|dd��|_|j|j|j
�}|j
t|dd�t|dd�|�|||_S#||_wxYw�N�tickAxisModerh�	subTickHir�	subTickLo)rg�
_labelAxisPosr�r��tickUp�tickDownr�)rU�yoldr�s   r/rz_XTicks.makeTicksts{��
�W�W��	��(�(���n�V�)L�M�D�G�������D�M�M�:�A����w�t�K��:�7�4��TU�;V�WX�Y���D�G��d�D�G���A1B�	Bc��|j}|r?|xs|j}|dk(r|jS|dk(r|j|jzS|jS�NrTrS)rxrRrgr��rU�moderhs   r/r�z_XTicks._labelAxisPos~�Q���}�}����-�4�-�-�D��u�}��w�w������w�w����-�-��w�w�r1r))rlrmrnr�rr�r�r�r�r�rr�r*r1r/r�r�KsK���K�
�@��@��@��@�V��'��r1r�c��eZdZdd�Zd�Zy)�_YTicksNc��|j}|r?|xs|j}|dk(r|jS|dk(r|j|jzS|jSr�)rxrRrfr�r�s   r/r�z_YTicks._labelAxisPos�r�r1c�&�|j}	|jt|dd��|_|j|j|j
�}|j
t|dd�t|dd�|�|||_S#||_wxYwr�)rfr�r�r��	tickRight�tickLeftr�)rU�xoldr�s   r/rz_YTicks.makeTicks�s{��
�W�W��	��(�(���n�V�)L�M�D�G�������t�}�}�=�A����w�t�K��:�7�4��TU�;V�WX�Y���D�G��d�D�G�r�r))rlrmrnr�rr*r1r/r�r��s���r1r�c��eZdZdZeeeed��eed��eeddddd	�d
����Z	dZ
d
�Zd�Zdd�Z
d�Zd�Zd�Zd�Zy	)�
XCategoryAxiszX/category axis�Tick length up the axis.r�Tick length down the axis.rgre�value�pointsN�IMode used for connecting axis ('bottom', 'top', 'value', 'points', None).)r!r�r�rprc��tj|�d|j_d|j_d|_d|_y)Nr����r�)r,rWrF�	boxAnchor�dyr�r�rrs r/rWzXCategoryAxis.__init__�s7�����d�#� #���������������
r1c��|jddd�|jdg�gd�|_d|j_d|jd_d	|jd_t
d
d�}|j|�|S)N��F���
�r��(rl)�One�Two�Three�Four�Fiver�r6r��Z��rm�rxr�rHrFr��anglerr��rUr�s  r/�demozXCategoryAxis.demo�st������R��%����(�)�*�@��� #�����#&����A�� �!����A����C����	���d���r1c���t|�|dk(r|j|_y|dk(r|j|jz|_y|dk(r|j|�|_y|dk(r||_yy)�!Join with y-axis using some mode.rgrer�r�N�r�rgr�rd�rU�yAxisr��poss    r/�
joinToAxiszXCategoryAxis.joinToAxis�sc���U���8���h�h�D�G�
�U�]��h�h����.�D�G�
�W�_��k�k�#�&�D�G�
�X�
��D�G�r1c��|j}|rH|j}|dvr|j||��y|dvr|j|||j��yyy)N�rgre�r��r�r��r�r��rxrpr�rJ�rU�ja�jams   r/�_joinToAxiszXCategoryAxis._joinToAxis��]��
�]�]��
��#�#�C��'�'�������-��+�+������$�2B�2B��C�,�	r1c�r�|j|jz|j|�|jzzS)z'returns the x position in drawing units)rfr\r�r{r�s  r/r�zXCategoryAxis.loScale�s,���w�w����#�d�k�k�#�&6�t�~�~�&E�E�Er1c��t�}|j�|js|St|j|j
z
|j|j|jz|jz|j�}|j|_	|j|_
|j|_|j|�|Sr)�
rr�r.rrfr_rgr�rar�r�r�r��rUr�rhs   r/rzXCategoryAxis.makeAxis�����G������������D�G�G�D�K�K�'����$�'�'�D�L�L�2H����2T�VZ�V]�V]�^���+�+����+�+���#�3�3���	���d���r1c���t�}|js|S|j}|��9|j}t	|�}|j
}|j}|j�}|j}|jdk(r|jnd}	t|�D]�}
|r	||
z
dz
}n|
}||k\r�|
|z
}||jvr|j|}n|j|
}|	r#|j}
|	|x}|_
|dkr|
dz}
nd}
|j}||
|z|zz}|j|||
z�|j!||xsd�|j#|���|S�NrUrHr����)rr2rHror9rLr{r�rfrRr~r�rFr�r"�	setOrigin�setTextr�)rUr�rH�catCountr�rLr�rgrf�pmvr��ic�label�_dyrL�lpfr,s                 r/rzXCategoryAxis.makeTickLabels�sf���G���!�!�!�8��*�*�
��$��~�~�H��M�"�A�#�4�4���~�~�H��#�#�%�B����B�#�1�1�9�<�$�)�)�$�C��8�_�
��#�(�1�*�Q�,�R��b��q�5�(���j���D�K�K�'� �K�K��.�E� �K�K��N�E���(�(�C�%(��W�,�A��
���s�C�2�I�C��C��(�(���!�C�%�8�+�+������"�S�&�)��
�
�m�B�/�5�2�6����e��'
�*�r1�rgN�rlrmrnror(r,r)rr
r*r�rWr�r�r�r�rrr*r1r/r�r��sr����L��h�+�-���-�/�#�E�(�E�7�H�d�$S�\�^�
�H��J���
�D�F��$r1r�c
��eZdZdZeeeed��eed��eed�d����Z	dZ
d	�Zd
�Zdd�Z
d
�Zd�Zd�Zd�Zy)�
YCategoryAxiszY/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�rprHc��tj|�d|j_d|j_d|_d|_y)Nr6r�r�r)r,rWrFr��dxr�r�rrs r/rWzYCategoryAxis.__init__s7�����d�#� #������������
���r1c��|jddd�|jdg�gd�|_d|j_d|jd_d	|jd_t
d
d�}|j|�|S)Nrlr��P)r�r�r�)r�r�r�r6r�r8r�r�rmr�r�s  r/r�zYCategoryAxis.demo&sr������R��$����
�|�$�2��� #�����#&����A�� �!����A����C����	���d���r1Nc��t|�|dk(r|jdz|_y|dk(r"|j|jzdz|_y|dk(r|j|�dz|_y|dk(r|dz|_yy�z!Join with x-axis using some mode.r��?rr�r�N�r�rfr�rd�rU�xAxisr�r�s    r/r�zYCategoryAxis.joinToAxis3sv��	�U���6�>��h�h��n�D�G�
�W�_��x�x�%�-�-�/�3�6�D�G�
�W�_��k�k�#�&��,�D�G�
�X�
��C�i�D�G�r1c��|j}|rH|j}|dvr|j||��y|dvr|j|||j��yyy�N)rrr�r�r�r�r�s   r/r�zYCategoryAxis._joinToAxis@r�r1c�X�|j|j|�|jzzS)z'Returns the y position in drawing units)rgr�r{r�s  r/r�zYCategoryAxis.loScaleIs#���w�w����S�)�$�.�.�8�8�8r1c��t�}|j�|js|St|j|j
|jz
|j|j
|jz|jz�}|j|_	|j|_
|j|_|j|�|Sr)�
rr�r.rrfrgr_r�rar�r�r�r�r�s   r/rzYCategoryAxis.makeAxisMs����G������������D�G�G�T�W�W�T�[�[�0�$�'�'�4�7�7�T�\�\�;Q�RV�R]�R]�;]�^���+�+����+�+���#�3�3���	���d���r1c���t�}|js|S|j}|��E|j}t	|�}|j
}|j}|j}|j�}|j}	|jdk(r|jnd}
t|�D]�}|r	||z
dz
}n|}||k\r�||z
}
|
|jvr|j|
}
n|j|}
|
j}|	||z|zz}|
r#|
j}|
|x}|
_|dkr|dz}nd}|
j||z|�|
j!||xsd�|j#|
���|Sr�)rr2rHror9rLr{rFr�rgrRr~r�r"rr�r�r�)rUr�rHr�r�rLr�rFrfrgr�r�rrrr_�_dxrLs                  r/rzYCategoryAxis.makeTickLabelsZso���G���!�!�!�8��*�*�
��$��~�~�H��M�"�A�#�4�4���~�~�H��[�[�F��#�#�%�B����B�#�1�1�9�<�$�)�)�$�C��8�_�
��#�(�1�*�Q�,�R��b��q�5�(���j���D�K�K�'� �K�K��.�E� �K�K��N�E��(�(���!�C�%�8�+�+����(�(�C�%(��W�,�A��
���s�C�2�I�C��C�����3���*��
�
�m�B�/�5�2�6����e��'
�(�r1�rNrr*r1r/rrsj����L���0�2� ��1�3�#�E�*T�$U�\�^�
�H��J��� �D�9��$r1rc��eZdZdZd�Zy)�TickLabellerztAbstract base class which may be used to indicate a change
    in the call signature for callable label formats
    c��y)NzAbstract class instance calledr*)rUrhr�s   r/rjzTickLabeller.__call__�s��/r1N�rlrmrnrorjr*r1r/r!r!�s���0r1r!c��d|zS)Nz%.12gr*r^s r/r0r0�s
��7�Q�;�r1c���eZdZdZed�ideeeed�f�d���deed���deed	���d
eed���deed
���deed���dee	d���dee
d���deed���deeddd�d���deeddd�d���dee	d���dee	d ���d!ee
d"���d#eed$���d%eeddd�d&���d'eeddd�d(���d)ee	d*���d+eed,���d-eed.���d/eed0���d1ee	d2���d3ee	d4���d5ed6d7���d8eed9d:d;�d<���d=ed6d>���d?ed6d@���dAeedB���dCeedD���dEeedF���dGeedH���dIeedJ���dKeeee
e	ddd�L�f�dM���dNeeee
e	ddd�L�f�dO���dPeeee�e
eddd�L�f�dQ���dReedSdTdUdV�dW��dXeedY���dZeed[d\d]�d^��d_eedSd`dadT�db���dceedd���deeedf���dgeedh���dieed9d:d;�dj���dkeedl���dmed6dn���doee	dp���dqee	dr���dsee	dt���duee	dv���dwee	dx���dyeedz���d{eed|���d}ee	d ���d~ee
d"���deed$���d�eeddd�d&���d�eeddd�d(���d�ee	d*���d�eed,���d�eed.���d�ee	d����d�ee	d����d�ee
d����d�ee
d����d�eed����d�eedSd�dTd��d���d�eed����d�eed����d�eed�����Zd��Zd��Zd��Zd��Zifd��Zd��Zd��Zd��Zd��Zd��Zd��Zd��Zd��Zd��Zd��Zd��Z d��Z!d��Z"d��Z#y6)��	ValueAxisz(Abstract value axis, unusable in itself.�	forceZero�nearzEnsure zero in range if true.rrr-r.r/r2r3r0r1r�r4r�r5r�r6r�r7r�rrHr8r9r�r:r�r;r�r<r�r=r�r>r�r?r�r@r�rAr�rBr�rCrDrE�minimumTickSpacingz)Minimum value for distance between ticks.�maximumTickszMaximum number of ticks.rFNrGrRrSrTrhrV�labelTextFormatz3Formatting string or function used for axis labels.�labelTextPostFormatzExtra Formatting string.�labelTextScalezScaling for label tick values.�valueMinzMinimum value on axis.�valueMaxzMaximum value on axis.�	valueStepzStep size used between ticks.�
valueStepsz&List of step sizes used between ticks.�avoidBoundFrac��emptyOKr{rzz.Fraction of interval to allow above and below.�avoidBoundSpacezSpace to allow above and below.�abf_ignore_zerozMSet to True to make the avoidBoundFrac calculations treat zero as non-special�
rangeRoundrdrf�ceiling�floorzHow to round the axis limits�
zrangePrefz!Zero range axis limit preference.rN�normalrPrQzHow values are plotted!�skipEndLrvrwzSkip high/low tick labels�origShiftIPC�"Lowest label shift interval ratio.�origShiftMin�Minimum amount to shift.�origShiftSpecialValuezspecial value for shiftr�z$Like joinAxisMode, but for the ticksrLrMrr^r_r`rarbr�zNumber of axis sub ticks, if >0r�zsub tick down or leftr�zsub tick up or rightr�z Display axis sub ticks, if true.r�zDisplay axis sub grid, if true.r�r�r�r�r�r�r�r�rXrY�subTickStrokeWidthz Width of sub ticks if specified.�subTickStrokeColorz Color of sub ticks if specified.rZr[�keepTickLabelsInsidez?Ensure tick labels do not project beyond bounds of axis if truercrergrh�
requiredRangezMinimum required value range.rirjr<z*extra values to use in min max calculationc�"�|jjdk7sJd��|jdPi|��|jdPidd�dd�dd�dd	�d
d�dd�d
d�dd�dd�dd�dd�dtd�dtd�dtd�dtd�dtd�dd�dtd�dtd�dtd�dtd�dtd�dd�dd�d d!�d"d�d#d�d$d�d%d�d&d�d'td�d(td�d)td�d*d�d+td�d,td�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_y)QNr&z%Abstract Class ValueAxis Instantiated�_configuredrrfrlrgr�rmrrHr.r2r0r�r'r�r�r�r�r�r�r�rnr�r�r�r�r�r�r�rDFr�r�r�r�r�r�r�r�r�r�r�r�r�rFrDr)r�r*�rqrRrhr+r,r-r.r/r0r2r5r6r7rdr:rNr;r<r=r?rAr�rLr_rarEr<r*)r�rlr%rrrrFr�r&s  r/rWzValueAxis.__init__�s����~�~�&�&��3�\�5\�\�3������B������R	�&'�R	�
 �R	� �
R	�#&�R	�#$�R	�'(�R	�)*�R	�()�R	�'(�R	�%&�R	�"'(�#R	�$'5�]�&C�%R	�&+9�9J�*K�'R	�(+9�9I�*J�)R	�*)7��(G�+R	�,,:�:L�+M�-R	�.+/�/R	�0+9��*G�1R	�2/=�=N�.O�3R	�4/=�=M�.N�5R	�6-;�?�,K�7R	�80>�>P�/Q�9R	�:%)�;R	�<#'�=R	�>(-�?R	�@*+�AR	�B+,�CR	�D&'�ER	�F%&�GR	�H%&�IR	�J1?�?O�0P�KR	�L0>�o�/N�MR	�N3A�AS�2T�OR	�P.2�QR	�R.<�M�-J�SR	�T2@�@Q�1R�UR	�V(,�WR	�X&*�YR	�Z"9��!?�[R	�\01�]R	�b.0�cR	�d()�eR	�l,0�mR	�n)/�oR	�p+/�qR	�r/3�sR	�t*.�uR	�~$(�R	�@$(�AR	�B%)�CR	�D*.�ER	�F+/�GR	�H+0�IR	�J&,�KR	�L&'�MR	�N!)�OR	�P"(�QR	�R(,�SR	�T(,�UR	�V15�WR	�X(.�YR	�Z*+�[R	�\ !�]R	�^ !�_R	�`'(�aR	�b+/�cR	�f����r1c�d�t|�|_t|�|_t|�|_yr)rtrvs    r/rxzValueAxis.setPosition.ryr1c�F�|j|�|j�y)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)rU�
dataSeriess  r/r�zValueAxis.configure4s��	
���z�"����r1c�R�|j�|j�d|_yr�)r|�_calcScaleFactorrGrrs r/rLzValueAxis._configure_endDs"���#�#�%�������r1c��	||f}||}|S#||_||_|j�\}}|||dzfx}|<Y|SxYw)Nr�)�	_valueMin�	_valueMax�_calcStepAndTickPositions)rUr.r/�cache�Kr=r0r+s        r/�_getValueStepAndTickszValueAxis._getValueStepAndTicksIsf��	8��(�#�A��a��A����	8�%�D�N�%�D�N��8�8�:�K�I�a�$�a��4��7�7�A��a����s	�	
�0Ac��|j}|dkDrm||z
}||krcd||zz}|dz}t||z
|�}t||z|�}|dk\r|dkr|dz|z
}d}n|dk\r|dkr||z
}d}|x}|_|x}|_||fS)Nrr$rm)rErArE�
_cValueMin�
_cValueMax)rUr.r/�rrr=�mr��y2s        r/�_preRangeAdjustzValueAxis._preRangeAdjustTs���
�
�
��
�a�4��8�#�A���t���(�*�+���c�	����2��h�'����2��h�'���S�=�R��V��c��B��B��B��q�[�R��T��b��B��B�-/�/��4�?�-/�/��4�?��� � r1c�\	�|jx}}|jx}}|�)t||jd|j�x}|_|�)t
||jd|j�x}|_||k(rU|dk(r<|�(|�&t|dd�}|dkDr|}d}n5|dkrd}|}n+d}d}n&|j�d}nd}n|dkDrd|z}d}nd}d|z}t|dd�r�tt
|d	d��}d
}|||z
z}	|	|_
||_||jz|_
|	|fd�}
|�+t||jd|
|j��x}|_|�+t
||jd|
|j��x}|_|j||�\}}|j}|}|}
|j }|r=|d
k(r't#t%|�t%|��d||z
zk}|r|dkrd}n|dkDrd}|j&}t|dd�}|xr|}t)|�s||f}t|dd�}t)|�s||f}|dk7xr|}|r	|dv}|dv}ndx}}|j*}|}|rt)|�s||f}t|j�}|xs|xs|}i}d}|�r;|dk�r5|dz
}d}|s|r�|j-|||�\}}}|r||dz}||dz}ndx}}|r,||z
|z} t/||d| z�}t/||d| z�}|r|d}!n|}!||z
}"|dst%|!�|kDr|!|"|zk\r|"}d}|r|d}!n|}!|
|z}"|dst%|!�|kDr|!|"|z
kr|"}d}|rg|j-|||�\}}}|r&||d|z
kr|d|z
}d}n||d|zk\}|d}|r&||d|zkDr|d|z}d}n||d|z
k}|d}|r|dkr��5|r
|s|_nd|_||_||_|j6}#|j8}$|$�|#��|j:}%|j=�|j4|j2}}|%�t%|%|z
�dkrJ|#r|#|j>z}&nd}&|$rt/|&||z
|$z|jz�}&|xj2|&zc_|jA�y)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.
        Nrr:g{�G�z�?g{�G�z���333333�?��_bubblePlotr8rnc�~�	|d}|||zdzz}||||z|||z
�S#t$rtdz}Y�4wxYw)Nr8皙�����?r$)r��	bubbleMAx)r+r,r.�bubbleV�	bubbleMaxrLs      r/r-z$ValueAxis._setRange.<locals>.special�s\��&��!��A��A�i�K�#�-�-���A�a�D��L��1��g��6�6��"�&�!�#�
�A�&�s�'�<�<r@r(r�r1r6Frd�rfr9�rfr8r�rHr����ư>)!r.r/rCr�r<rXrFrYr�ru�_bubbleV�
_bubbleMaxr��
_bubbleRadiusr]r7r'rAr�r2r&r5rVrE�_computedValueSteprQrRr=r?rA�_calcValueStep�
_valueStep�_rangeAdjust)'rUrM�oMinr.�oMaxr/�zrprf�fracrer-r7�cMin�cMaxr'�abf�do_rr�do_abf�abfiz�rrn�rrx�abS�do_abs�aL�gorT�iterr0r+�fuzz�i0�i1�sfrL�ur=r?rAr[s'                                       r/rKzValueAxis._setRangehs����-�-�'��x��-�-�'��x���(�:�d�o�o�^_�ae�aw�aw�:x�x�X�����(�:�d�o�o�^_�ae�aw�aw�:x�x�X����x����{��<�D�L�!�$�|�A�6�C��1�u�#&��#$���Q��#$��#&��#'��#(���]�]�*�$�H�#�H��A�:�"�8�|�H�"�H�"�H�"�8�|�H��4�
�d�+��h�z�!�A�6�7�I��D��(�8�+�,�G�#�D�M�'�D�O�!%�d�l�l�!2�D��)0�9�
7��|�(�:�d�o�o�^_�ho�CG�CY�CY�;Z�Z�X����|�(�:�d�o�o�^_�ho�CG�CY�CY�;Z�Z�X���!�1�1�(�8�D���(��_�_�
������N�N�	���&� ���H�
�c�(�m�<��8�H�CT�@U�U�	���A�:��x��a�Z�A���!�!���D��d�3�3�������S�z��s�(�C���.��6���U�|��5�L�E��f�$�.����� 0�0�C�� 2�2�C��M�C�#��"�"�������:��3�h��
�4�<�<�
 ��
�
&�f�
&��������T�2�X��A�I�D��B���%)�%?�%?��(�TY�%Z�"�	�1�d��"�3�q�6�)�B�"�3�q�6�)�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��%)�%?�%?��(�TY�%Z�"�	�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�V��&/�D�#�&*�D�#�!���!����(�(���(�(���#�|�'?�$(�$>�$>�!����!�!%������h�H�$�,��4I�(�4R�0S�TX�0X��$�T�_�_�4�A��A���A�x��0�,�>�t�|�|�K�L�A����!�#�����r1c��|j|_|j|_t	|d�r|`|j
�y)N�_subTickValues)r.rQr/rRrbr�rLrrs r/rczValueAxis._pseudo_configure
s4�������������4�(�)�t�/B����r1c��y)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*rrs r/rpzValueAxis._rangeAdjusts��	
r1c��y)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*rrs r/�_adjustAxisTickszValueAxis._adjustAxisTickss��	
r1c��|jt|j|jz
�z|_|jS�z�Calculate the axis' scale factor.
        This should be called only *after* the axis' range is set.
        Returns a number.
        )r�rurRrQ�_scaleFactorrrs r/rOzValueAxis._calcScaleFactors3��
!�L�L�5����$�.�.�1P�+Q�Q���� � � r1c��t|dd�}|r
|`||_n|j�|j}|j}|j
}d|z}|j}tt|�|z�}||z}|dvr|||zkDr|dz}n
|||z
kr|dz
}tt|�|z�}||z}|dvr|||z
kr|dz
}n
|||zkDr|dz}|t||dz�D�	cgc]}	|	|z��	c}	fScc}	w)Nrmr�rgrHrh)
r�rmrornrQrRr7rJrur�)
rUr0r.r/r�r7r�rLr�r�s
          r/rSz#ValueAxis._calcStepAndTickPositions&s���D�!5�d�;�	���'�'�D�O����!����I��>�>���>�>���I�~���_�_�
�
��x���*�
+���y�L���)�)���$����a���
�x��}�_�b�A�g�b�
��x���*�
+���y�L���+�+���$����a���
�x��}�_�b�A�g�b��u�R��1��~�>�!�!�I�+�>�>�>��>s�'C7c�(�|j�dSr�)rSrrs r/�_calcTickPositionszValueAxis._calcTickPositions>s���-�-�/��2�2r1c���t|d�s|j�|j}t|d��s�|jj}|dddk(r	d}t
}nd}d�}|D�cgc]}t
|dd	�s�|��}}gj}t|j�}t|�}	|	d
kr	g|_
�n|	d
k(r|d	|dz
}
n7|	dk(rt|d	|dz
|d
|d	z
�}
n|	d	z}	||	d	z||	z
}
|
|z}|j|z}|j|z
}
|d|kDr|jd|d|
z
�|d|
kr|j|d|
z�|
t|d	z�z}
t!|dd�D]9\}	}t#|�D]&}|||d	z|
z�z}||ks||
k\r�||��(�;|j$|_
|j|_|Scc}w)
Nr\r�r�rrr�c��|Sr)r*r^s r/r0z)ValueAxis._calcSubTicks.<locals>.<lambda>Ls���r1�_doSubTicksrHr8�r�)rbrcr\r�rlrJr�rr�r9r�rErQrR�insertru�	enumerater�r)rUr�r��iFuzz�dCnvr��OTVr+�nstr��dstr��vn�vxr,�jr�s                 r/r�zValueAxis._calcSubTicksAs���t�M�*��"�"�$������t�,�-��.�.�)�)�C��3�B�x��&�������!�� #�C�"�w�r�-��'B�2�C�C�C��	�	�A��d�o�o�&�C��C��A���s�&(��#��a�4��a�&��Q��-�C���T��c�!�f�S��V�m�C��F�3�q�6�M�:�C��!�G�A��a��c�(�S��V�+�C��5�y���^�^�D�(���^�^�D�(���q�6�"�9�c�j�j��3�q�6�#�:�6��r�7�2�:�s�z�z�#�b�'�#�+�6��u�S��U�|�#��$�S��"�X�.��C�A�a�"�3�Z����d�A�a�C��9�o�-���b�5�A�r�E�8��!����
'(�j�j��#��.�.����
��7Ds�&G"�9G"c��t|dd�|_|jr|jS|j�|_|j�|jS)zKCalculate a list of tick positions on the axis.  Returns a list of numbers.r1N)r�r\r�r�rrs r/r|z ValueAxis._calcTickmarkPositionsksP��"�4��T�:������D�$4�$4�4��2�2�4����������r1c��|j�o|j|jz
}|tt	|j
dz
�t	|j�|jz�z}t|�|_	y|j|_	y)�8Calculate _valueStep for the axis or get from valueStep.NrH)
r0rRrQrArur*r�r)r#ro)rU�rawRange�rawIntervals   r/rnzValueAxis._calcValueStepssk���>�>�!��~�~����6�H�"�S��t�/@�/@��/B�)C�U�4�<�<�EX�Y]�Yp�Yp�Ep�%r�r�K�-�k�:�D�O�"�n�n�D�Or1c�,�t|j�Sr))rMr\rrs r/�_allIntTickszValueAxis._allIntTicks|s���t�'�'�(�(r1c���t�}|js|S|j}|�+|jxs|j	�xrdxst
}nB|tur|j	�rd}n't|d�r|j|j�|j}|j}|j|jg}|j}|j�|d|z
<|j }|j"dk7r\|j$r
|j}n|j}|j"dk(r|g}n&|||j&zg}|j"dk(r|d=ng}t)|j�}	|	dz
}
t+|j�D�]�\}}||	z
}
|
|vr||
}
n||}
|s�|
j,s�+|j/|�}|r|D]}t1||z
�dks�d}n|��]|�||z}n|}t3|t�r||z}n_t5|�r|t)|�kr||}n@d	}n=t|d
�r#t3|t6�r
|||�}n||�}nt9d|z��|r||z}|||<|
j:|�|
j=|�|j>r�t3|t@�r�|j}|s<|
jC�\}}}}||kr"|
jE|
jF|z|z
��}
||
k(rK||j&z}|
jC�\}}}}||kDr"|
jE|
jF|z
|z��}
|jI|
����|S)
Nz%.0f�
calcPlacesrHrdrvrwrrir�rjzInvalid labelTextFormat %s)r)%rr2rqr+r��_defaultLabelFormatter�strrbr�r\r,r-rfrgr�r�rFr<rr�r9r�rrdr�r�r&r!�
ValueErrorr�r�rD�
XValueAxis�	getBounds�clonerr�)rUr�r7�post�sclr�r�rF�sk�nticks�nticks1r��tickrrL�skvr��txt�a_xr�r�r�r��a_x1s                        r/rzValueAxis.makeTickLabelss4���G���!�!�!�8��!�!���9��$�$�b��):�):�)<�)G��)a�Ka�A�
�#�X�$�+�+�-�6�q�
�Q�|�
$�
�L�L��)�)�*��'�'���!�!���w�w���� ���O�O���%�%�'��A�a�C�������=�=�&� ��|�|��W�W���W�W���}�}�g�%��T����D�L�L��)���=�=�%�'��1���B��T�%�%�&���1�*���� 0� 0�1�2	!�F�A�d��f�H�E�����u�
���q�	���U�]�]��J�J�t�$���!�"���s�1�u�:�d�?� $�A�!�"��=��� ��H�� ��!�!�S�)��Q��3��q���s�1�v�:�"#�A�$�C�"$�C� ��:�.�%�a��5�"#�D��)�C�"#�A�$�C�(�)E��)I�J�J��4�#�:�S��C��F�#�E�O�O�S�)��M�M�#�&��0�0�%�d�J�7�"&�'�'�C�#$�16���1B���B��B�#%��8�,1�K�K�5�8�8�c�>�B�;N�K�,O�E� �'�z�'*�D�L�L�'8��16���1B���B��B�#%��9�*/�+�+����"��T�9I�+�*J�E��E�E�%�L�e2	!�h�r1c��|jsJd��|�d}|j|jf|j}|j}|j
r|}||jz
}||||jz
zzS)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 configuredr)rGrfrgr�r�rLr�rQ)rUr��orgr�s    r/rdzValueAxis.scale�s������T�!T�T���=�!�%��w�w���� ����1��
�
�
��� � ���B��4�<�<��C��R�����/�0�0�0r1r*)$rlrmrnror(r)rrr
rr	rrrrrr*rWrxr�rLrVr]rKrcrpr�rOrSr�r�r|rnr�rrdr*r1r/r&r&�s���.��F
� ��9�U�6�]�*C�!D�Kj�k�F
��y�/P�Q�F
�#�9�3P�Q�F
�%�Y�5T�U�	F
�
$�I�4R�S�F
�#�9�3P�Q�
F
�#�8�2Q�R�F
�#�=�7V�W�F
�'�'<�Cc�d�F
�%�U�1�Q�q�\�7\�]�F
�&�e�A�a��l�8^�_�F
�(��6\�]�F
�'�x�6L�M�F
�'�}�;Q�R�F
�+�+@�Gh�i�F
� )��q��1��;e�f�!F
�"*�%��!�A�,�<g�h�#F
�$ ,�H�:e�f�%F
�&!��6[�\�'F
�(�~�4W�X�)F
�*$�I�4c�d�+F
�,*�(�9d�e�-F
�.$�H�3M�N�/F
�0�d�)E�F�1F
�2%�U�6�%��%?�Fr�s�3F
�4'�t�2g�h�5F
�6+�4�6P�Q�7F
�8&�n�;[�\�9F
�: ��5M�N�;F
�< ��5M�N�=F
�>!��6U�V�?F
�@"�"7�>f�g�AF
�B&�h��z�(�[\�`a�ef�?g�/h�&i�qa�b�CF
�D'�x��
�8�\]�ab�fg�@h�0i�'j�rS�T�EF
�F'�x��	�1B�:�i�`a�ef�jk�Cl�0m�'n�vE�F�GF
�H ��f�V�I�g� F�Ge�f�IF
�J"�.�7Z�[�KF
�L�U�8�I�m�D�E^�_�MF
�N ��f�W�U�6� B�Id�e�OF
�P$�N�9]�^�QF
�R$�N�9S�T�SF
�T!-�^�B[� \�UF
�V$�E�&��v�$>�Ek�l�WF
�X(�	�8]�^�YF
�Z#�4�-B�C�[F
�\�h�-Y�Z�]F
�^�h�-V�W�_F
�`"�(�1R�S�aF
�b!��0G�H�cF
�d!��0F�G�eF
�f'�y�7Y�Z�gF
�h&�i�6W�X�iF
�j*�(�9O�P�kF
�l*�-�>T�U�mF
�n".�.C�Jk�!l�oF
�p ,�E�!�A�a�L�>h�i�qF
�r!-�U�1�Q�q�\�?j� k�sF
�t#/�x�=h�"i�uF
�v$�N�9^�_�wF
�x"�.�7Z�[�yF
�z'�x�6T�U�{F
�|*�(�9[�\�}F
�~*�-�>`�a�F
�@'�}�;Y�Z�AF
�B ,�I�<}�~�CF
�D ��f�U�6�(� C�Dm�n�EF
�F%�^�:Y�Z�GF
�H%�%5�<a�b�IF
�J)�)>�Eq�r�KF
�H�PV�p%�� �
>@�	�!�(`�D�
�
�!�?�03�(�T �-�)�T�l
1r1r&c��eZdZdZeeeed��eed��edd��eeddd	d
d�d��ee	d���
�Z
dZd�Zd�Z
dd�Zd�Zd�Zy)r�zX/value axisr�rr�NrIrgrer�r�r�rK)r!r�r�rxrprJrc���tj|fi|��d|j_d|j_d|j_d|_d|_d|_d|_	d|_
y)Nr�rr�r�)r&rWrFr�rr�r�r�rxrprJr&s  r/rWzXValueAxis.__init__�s\�����4�%�"�%� #��������������������
���
� �����r1c��|jddd�|jdg�tdd�}|j|�|S)Nr�rl�r�r�rm�rxr�rr�r�s  r/r�zXValueAxis.demos@������R��%����(�)�*��C����	���d���r1c��t|�|dk(r|jdz|_y|dk(r"|j|jzdz|_y|dk(r|j|�dz|_y|dk(r|dz|_yy)r�rgrrer�r�Nr�r�s    r/r�zXValueAxis.joinToAxis
su���U���8���h�h��n�D�G�
�U�]��x�x�%�-�-�/�3�6�D�G�
�W�_��k�k�#�&��,�D�G�
�X�
��C�i�D�G�r1c��|j}|rL|jxsd}|dvr|j||��y|dvr|j|||j��yyy)Nrgr�r�r�r�r�r�s   r/r�zXValueAxis._joinToAxissb��
�]�]��
��#�#�/�x�C��'�'�������-��+�+������$�2B�2B��C�,�	r1c��t�}|j�|js|St|j|j
z
|j|j|jz|jz|j�}|j|_	|j|_
|j|_|j|�|Sr)r�r�s   r/rzXValueAxis.makeAxis"r�r1r�rlrmrnror(r&r)rr
rr*r�rWr�r�r�rr*r1r/r�r��s�����I��h�+�-���-�/���*�,�#�E�(�E�7�H�d�$S�\�^�"�>�=�?�
�H��J� ��
 �D�r1r�)�jan�feb�mar�apr�may�jun�jul�aug�sep�oct�nov�dec)��r�r�r�r�r�r�r�r�r�r�c��|jd�\}}t|�}|j�}tj	|�dz}|t
|dz
ksJ�||fS)aThis 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.
    �-rH)�splitrJ�lower�_months�index�_maxDays)�dmstr�dstr�mstr�dd�mms     r/�parseDayAndMonthr�;s\�����S�!�J�D�$�	�T��B��:�:�<�D�	���t�	�q�	 �B�
��"�Q�$�������8�Or1c��eZdZdZd�Zd�Zy)�_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�`�t|�rd}|D]}	t|�\}}�|Sy#d}Y�xYwr�)r&r�)rUr,�answer�elementr�r�s      r/�testz_isListOfDaysAndMonths.testNsF����8��F��
#��#�-�g�6�F�B��
#�
�M���	#�"�F�s�'�-c��|Sr)r*)rUr,s  r/�	normalizez _isListOfDaysAndMonths.normalizeZs���r1N)rlrmrnror�r�r*r1r/r�r�Is���
�r1r�)rHr8r�����<�x���i,ihi�i�iiXi�iHi�i8i�i`	c��eZdZdZeeeed��eed��eed��eed��ee	d��edd	��ee
ed
dd��d
��ee
ed
dd��d��eed��eee
e
��d��eed��eedddd�d���
Zej"Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy) �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 spacingrz$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.rrHr3zWeekday 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 datesrdrerfrgrh)
r!�bottomAxisLabelSlack�	niceMonth�forceEndDate�forceFirstDate�forceDatesEachYear�xLabelFormat�
dayOfWeekName�	monthName�	dailyFreq�specifiedTickDates�specialTickClearrcc���tj|fi|��d|_d|_d|_d|_g|_d|_d|_gd�|_	gd�|_
d|_dx|_|_
y)NrcrHrz	{mm}/{yy})�Monday�Tuesday�	Wednesday�Thursday�Friday�Saturday�Sunday)�January�February�March�April�May�June�July�August�	September�October�November�December)r�rWr�r�r�r�r�r�r�r�r�r�r1r�r&s  r/rWzNormalDateXValueAxis.__init__}sv�����D�&�2�&�%(��!����������"$������'���k���V��� !���48�8���$�1r1c�H�|j�}|j|�|S)z'Convert a scalar to a NormalDate value.)�_valueClassr�)rUr,r�s   r/�
_scalar2NDzNormalDateXValueAxis._scalar2ND�s �������	���A���r1c��t|tj�s|j|�}tjtj
}}	|j|jct_t_|j|j�||ct_t_S#||ct_t_wxYw)z(Create a formatted label for some value.)
r�r�
NormalDater�_dayOfWeekName�
_monthNamer�r��formatMSr�)rUrLr�r[s    r/�_dateFormatterz#NormalDateXValueAxis._dateFormatter�s����!�J�1�1�2�����"�A��(�(�*�*?�*?�1��	D�?C�?Q�?Q�SW�Sa�Sa�<�J�%�z�'<��:�:�d�/�/�0�?@�!�<�J�%�z�'<��q�!�<�J�%�z�'<�s
�
AB*�*Cc�����j}�j}�j}t|t�r�fd�}�j
s|dn|�j
�}�js|dn|�j�}�j}|j|j|j}
}	}|j|j|j}
}}t||�jd�||	|
xsd|	z||�}t!|d|d|d|d|
�}|d|dz
}|d|dz
}t#||j$xsd�j&�}||�j(zz}g}g}�j*}�j,r߉j,D�cgc]
}||���}}|D�cgc]
}||���}}�j.rF||dk(r>|t1|d|dz
�z|d|dz
z|kr�j2rd	|d<n|d=|d=�j4rI||dk(rA|t1|d|dz
�z|d|d
z
z|kr�j2r	d	|d
<||fS|d
=|d
=||fS�j6�r�t9t;t<�j6��}|j?�}|j?�}g}g}|}||kra|D]Q\}}tAjB|||f�}||k\s�$||ks�*|jE|�|jE||���S|dz
}||kr�a�j.rp||dk7rh|jGd|�|jGd||��|t1|d|dz
�z|d|dz
z|kr�j2rd	|d<n|d=|d=�j4rq||dk7ri|jE|�|jE||��|t1|d|dz
�z|d|d
z
z|kr�j2r	d	|d
<||fS|d
=|d
=||fS||||fd�}tI|�}tJD�]}||z} | |ks�| |z|ks�|dz
}!�jLrC|jO�|dkxr|xsdz}"|"r#�j4r||!�d|d_(|!|"z}!	|jO�|djO�k(}#|!|#k\r||!�|!|z}!|!|#k\r��j.rX|d|k7rP|d�d|d_(|t1|d|dz
�z|d|dz
z|kr�j2rd	|d<n|d=|d=�j4rL�jLr@"r>|t1|d|dz
�z|d|d
z
z|kr�j2rd	|d
<n|d
=|d
=	|dr|d|dk(r|d=|d=||fcStUd
��cc}wcc}w#d}#Y��xYw#tR$rY�1wxYw)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�(���j�|�Sr))r)r�rUs �r/�	formatterz4NormalDateXValueAxis._xAxisTicker.<locals>.formatter�s����*�*�4��5�5r1rr��
r_rHr8r�r�r�c�d�|jd||�|jd|||��yr�)r�)r��xValsr�ticksrFs     r/�addTickz2NormalDateXValueAxis._xAxisTicker.<locals>.addTick�s+���L�L��5��8�$��M�M�!�I�e�A�h�/�0r1r�z6Problem selecting NormalDate value axis tick positions)+rr�rr�r!r.r/rF�fontName�fontSize�leading�
textAnchorr�r�rr�rrEr�r)r�r*r�r�rur�r�r�r4r5r��yearr�NDrr�r9�_NDINTMr��monthr�r�r�)$rUr�VC�
axisLengthr�	firstDate�endDaterFr!r"r#r$r�r��RBL�xLabelW�xLabelHr��Wrr*r,r��forcedPartialDates�	firstYear�lastYear�yyyyr�r��theDater r�r�r�r��wfds$`                                   r/�_xAxisTickerz!NormalDateXValueAxis._xAxisTicker�s�����
�
���\�\�
��'�'�	��i��-�
6�$(�M�M�E�!�H�r�$�-�-�7H�	�#'�=�=�%��)�b����6G������&,�o�o�v������G�(��'-�'8�'8�&�:J�:J�F�L�L�u�I�
��Y�y�1�7�7��=�h��W�4��H��Z�	�K����A��s�1�v�c�!�f�S��V�U�C���a�&��Q��-���a�&��Q��-�������)��$�*A�*A�B��
�a��)�)�)�)�������(�(���"�"�$(�$;�$;�<�q�R��U�<�E�<�,1�2�q�i��l�2�F�2��"�"�y�%��(�':�
�5�QV�WY�QZ�[`�ab�[c�Qc�Kd�@d�gl�mn�go�pu�vw�px�gx�?y�{|�?|��(�(� "�F�1�I��a��&��)�� � �W�e�B�i�%7�Z��e�TV�i�X]�^_�X`�N`�Ha�=a�di�jl�dm�ns�tv�nw�dw�<x�z{�<{��(�(�!#�F�2�J��&�=� ��b�	�6�"�:��&�=� �
�"�"�!%�c�*:�D�<S�<S�&T�!U��"���(�I��|�|�~�H��E��F��D��(�"� 2�:�H�R��(�m�m�T�2�r�N�;�G��)�+��7�0B����W�-��
�
�i��&8�9�	:�
��	��
�(�"��"�"�y�%��(�':����Q�	�*��
�
�a�	�)� 4�5��u�U�2�Y�u�Q�x�%7�8�8�5��8�E�!�H�;L�M�q�P��,�,�$&��q�	�!�!�H�f�Q�i�� � �W�e�B�i�%7����W�%��
�
�i��0�1��u�U�2�Y�u�Q�x�%7�8�8�5��9�U�2�Y�;N�O�QR�R��,�,�%'��r�
�
�&�=� �"�"�I�v�b�z��&�=� �"�i�u�V�	1�
��J���*	%�A��!��A��,��1�Q�3�*�#4��a�C���>�>��
�
��1�b�5�;�Q�+<�"�=�A���,�,�#�A�J�12�E�!�H�0��Q����#�/�/�+�u�Q�x�~�~�/?�?�C���f��A�J���F�A���f��&�&�5��8�Y�+>��A�J�)*�E�!�H�(�"�5��r��5��8�);�#<�<�u�Q�x��a��?P�Q�ST�T��0�0�(*�F�1�I� %�a��&��)��$�$����A�"�5��r��5��8�);�#<�<�u�R�y��r��?R�S�UV�V��0�0�)+�F�2�J� %�b�	�6�"�:���a�y�V�A�Y��q�	�%9�!�!�H�f�Q�i��f�}�$�U*	%�V�Q�R�R��W=��2��\��C��."����s*�W�(W	�#$W�W�W�	W$�#W$c��|j}|D]=}tt|��D]$}||\}}t||�r�||�|f||<�&�?y)z1Convert all XValues to a standard normalDate typeN)rr�r9r�)rU�datar)rr�r,r_s       r/�
_convertXVzNormalDateXValueAxis._convertXV,s]���
�
���	%�A��3�q�6�]�
%����t���1�!�!�B�'��q�E�!�9�A�a�D�
%�	%r1c�.�|jrrg}d}|d}|D].}|j�}||k7r|r|j|�|}|}�0|d}|dk7r|j|�|j|�\}}||fS|j|�\}}||fS)Nrr�)r�r(rr7)	rUr�xEOM�pm�pxr,r[�stepsrFs	         r/�_getStepsAndLabelsz'NormalDateXValueAxis._getStepsAndLabels6s����>�>��D��B��q��B��
���G�G�I���q�5��4�;�;�r�?��B���
��r��B��B�x��{�D�K�K��O� �-�-�d�3�M�E�6��f�}��!�-�-�e�4�M�E�6��f�}�r1c��|j|�t�}|D]}|D]}|j|d���t|�}|j	�|j
}|j
|�\}}|j|j}	}|�|dn||�}|	�|dn||	�}	||	c|_	|_
||_||_|jt|	|z
�z|_||_d|_y)Nrr�rH)r:�setr�r4�sortrr@r.r/rQrRr\rqr�rur�rG)
rUr9rr,�dvr)r?rFr.r/s
          r/r�zNormalDateXValueAxis.configureHs������������	!�A��
!���	�	�"�Q�%� �
!�	!��U���
�
�
��
�
�
���.�.�u�5���f�!�]�]�D�M�M�(�� (� 0�5��8�b��l�� (� 0�5��9�b��l��)1�8�&����� ��� &��� �L�L�5��H�1D�+E�E��� �����r1)rlrmrnror(r�r)rr�isListOfDaysAndMonthsrr
rrr
r*rr&rrWrrr7r:r@r�r*r1r/r�r�as����j�+�H�;k�l� ��1W�X�#�I�4f�g�%�i�6i�j�)�*?�Gk�l�$�D�/d�e�$�Z���a�1�%M�Td�e� ��H�Q�"��!K�R`�a� ��1t�u�)�&��L�1I�*J�RC�D�'�	�8z�{���f�U�6�(� C�Dm�n�
�H�"�-�-�K�9�"�	D�KS�Z%��$r1r�c��eZdZdZeeeed��eed��edd��eed�d��ee	d	���
�Z
dZd�Zd
�Z
dd�Zd�Zd�Zy)�
YValueAxiszY/value axisrrr	NrIr
r
rK)r!r�r�rxrprJrHc���tj|�d|j_d|j_d|j_d|_d|_d|_d|_	d|_
y)Nr6r�rr�)r&rWrFr�rr�r�r�rxrprJrrs r/rWzYValueAxis.__init__psW�����4� � #��������������������
���
� �����r1c��dg}|jddd�|j|�tdd�}|j|�|S)N)r�r�r��*rmr�rr�r�)rUr9�drawings   r/r�zYValueAxis.demo~sE�� �!������b�"�%����t���#�s�#�����D���r1c��t|�|dk(r|jdz|_y|dk(r"|j|jzdz|_y|dk(r|j|�dz|_y|dk(r|dz|_yyrrrs    r/r�zYValueAxis.joinToAxis�st���U���6�>��h�h��n�D�G�
�W�_��x�x�%�-�-�/�3�6�D�G�
�W�_��k�k�#�&��,�D�G�
�X�
��C�i�D�G�r1c��|j}|rH|j}|dvr|j||��y|dvr|j|||j��yyyrr�r�s   r/r�zYValueAxis._joinToAxis�r�r1c��t�}|j�|js|St|j|j
|jz
|j|j
|jz|jz�}|j|_	|j|_
|j|_|j|�|Sr)rr�s   r/rzYValueAxis.makeAxis�s����G������������D�G�G�T�W�W�T�[�[�0�$�'�'�4�7�7�T�\�\�;Q�RV�R]�R]�;]�^���+�+����+�+���#�3�3���	���d���r1rr�r*r1r/rGrG]sz����I���0�2� ��1�3���*�,�#�E�*T�$U�\�^�"�>�=�?�
�H��J� ��
 �D�
r1rGc�6�eZdZdZdezZdezZd�Zd�Zd�Zy)�
TimeValueAxisr�r�c�L�|js|j|_i|_yr))r+�timeLabelTextFormatter�_saved_tickInfo�rU�argsrVs   r/rWzTimeValueAxis.__init__�s!���#�#�#'�#>�#>�D� �!��r1c�:�|j��|j|jz
}|tt	|j
dz
�t	|j�|jz�z}||jk\r|j}d|_	nO||jk\r|j}d|_	n,||jk\r|j}d|_	n	d}d|_	||_|dkDrt||z�}t|�|z|_y|j|_y)r�NrH�days�hours�minutes�seconds)r0rRrQrArur*r�r)�_dc�_unit�_hc�_mc�_unitdrJr#ro)rUr�r�r�s    r/rnzTimeValueAxis._calcValueStep�s����>�>�!��~�~����6�H�"�S��t�/@�/@��/B�)C�U�4�<�<�EX�Y]�Yp�Yp�Ep�%r�r�K��d�h�h�&��H�H��#��
�����(��H�H��$��
�����(��H�H��&��
���&��
��D�K���s�!�+�a�-�0��-�k�:�Q�>�D�O�"�n�n�D�Or1c��|j}|t|j�f}||jvr|j|}�nt	|�}|jD�cgc]}||z��	}}|j
d}t
|�r||fd�}n�|D�cgc]}d|z��	}	}td�|	D��}
|dk(r
|d|
zfd�}nx||jk(rdnd	}|D�cgc]}|t|�z
|z��}}t
|�r1||jk(rd
n||jk(rdnd}
||d
||
fzfd�}n|d|
|fzfd�}||j|<||�Scc}wcc}wcc}w)Nrc��d||z|fzS)Nz%.0f%sr*)r,�ufr�s   r/r0z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>�s��H��"��Q�x�,?�r1z%.10fc3�zK�|]3}t|jd��|jd�z
dz
���5y�w)�0�.rHN)r9�rstripr�)�.0rLs  r/�	<genexpr>z7TimeValueAxis.timeLabelTextFormatter.<locals>.<genexpr>�s/����L�1�C�����
�.�q�w�w�s�|�;�A�=�L�s�9;rHz%%.%dfsc��|||zzSr)r*�r,rb�fmts   r/r0z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>�s��s�a��d�|�r1r�r��hr[r�z%%d%s%%d%%sc	�d�|t||z�t||zt||z�z
|z�fzSr)rI)r,rb�fmrks    r/r0z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>�sC��PS�WZ�[\�]_�[_�W`�ad�fg�hj�fj�mp�qr�su�qu�mv�fv�xz�ez�a{�V|�P|�r1z%%.%df%sc��|||zzSr)r*rjs   r/r0z6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>�s���q�QS�t��r1)r_�tupler\rSrur\rMrEr[rJr^)rU�valr�r�rkrbrLr�r��stv�stvlrn�fv�s1s              r/rRz$TimeValueAxis.timeLabelTextFormatter�se���K�K��
�u�T�%�%�&�'����$�$�$��&�&�q�)�C��q��B� $� 0� 0�1�1�!�B�$�1�B�1��
�
�1�
�A��r�{�#%��?��,.�/�q�w��{�/��/��L��L�L���a�4�&(�Y��-=�K�C� !�$�(�(�{���B�35�6�a�1�s�1�v�:�r�/�6�B�6��r�{�$%�t�x�x�K�S�Q����[�c�c��*,��
��2��8N�|��*,��t�A�h�1F�T��&)�D� � ��#��3�x���)2��
0��7s�E
�E�EN)	rlrmrnr^r]r[rWrnrRr*r1r/rPrP�s(��
�C�
�S�&�C�
�S�&�C�"�
-�2r1rPc��eZdZd�Zy)�XTimeValueAxisc�h�tj|g|��i|��tj|g|��i|��yr))r�rWrPrTs   r/rWzXTimeValueAxis.__init__�s2�����D�.�$�.��.����t�1�T�1�D�1r1N�rlrmrnrWr*r1r/rwrw�s��2r1rwc��eZdZdZeeeed��eed��eed��ee	ee
f�d��eed����Zd	�Zd
�Z
y)�
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.rr>r@z8Skip/Keep lowest tick label when true/false.
Or skiplistzadd this to the labels)r!�leftAxisPercent�leftAxisOrigShiftIPC�leftAxisOrigShiftMin�leftAxisSkipLL0�labelVOffsetc��tj|fi|��d|_d|_d|_d|_dx|_|_d|_y)Nr�rHg333333�?r�r)	rGrWrEr|r}r~rr�r1r&s  r/rWzAdjYValueAxis.__init__�sL�����D�&�2�&���� ���$(��!�$&��!�34�4���t�0���r1c	�8�ddlm}m}|j|j}}|j
}t
t|fd�gd���}|s|g}|j|j}}|r�||z
|kr{|||||��dd\}	}
|
|	z
|krR|	|
zdz}t||dzz
|�}	t||dzz|�}
|d	k\r|	d	kr|
d	z|	z
}
d	}	n|dk\r|	dkr|
|	z
}
d}	|	|
c|_|_||j|jd
||j||j��\}}
|j}|r�|d
|dz
}t|�s||zx}}n||dz}||d
z}t!|d|d�}t!|d
|d�}||dz
|kr|j|z
|_|d|z
|kr|j|z|_||j|jd
||j||j��\}}
|d|_|d|_||_|j$�|
|_n|j$|_t)|jd	z
�dkr||j+�|j|j}}t|j,|j.z||z
|j0z|j2z�}|j|z
|_|j4r2t|j4�r|j4D]}	d|
|<�
d|
d<yy#t6$rY�wxYw)z$Adjusts the value range of the axis.r)�find_good_gridrc��||kSr)r*)r,r[s  r/r0z,AdjYValueAxis._rangeAdjust.<locals>.<lambda>s
��a��d�r1)r�r�r�rH��	)r��gridNr8r$rmrH)r�r��percentr�r�rXrYr�rir�)�reportlab.graphics.charts.utilsr�rrQrRr*r4r8r0rErArEr|r�r2r&r�r\r+rqr�rnr}ror~r�rr�)rUr�r�y_min�y_maxr[r�r0rEr�r\�ymr+r�rwr�r��_nrf�vMax�vMinr,s                      r/rpzAdjYValueAxis._rangeAdjustsP��	J��~�~�t�~�~�u��������1�*�=�9�:���q�c�!�#'�>�>�4�3E�3E�=�	��U�U�]�]�:�#�E�5�1�)�D�R�a�H�F�B���B�w��&���e�S�[����M�#�-�-�e�4����M�#�-�-�e�4���#�:�"�S�&��c��B��B��B��A�X�"�Q�$��b��B��B�-/��*�D�N�D�N��T�^�^�T�^�^�1��4�K_�K_�en�~B�~O�~O�P���1��!�!����A�$�q��t�)�B���:��S�&� ��R���A��Y����A��Y����l�1�Q�4�0�B���l�1�R�5�1�B��A�a�D�y�2�~�����0C�t�~���u�R�x�"�}�t�~�~��/B�d�n��������q�A�t�Oc�Oc�ir�BF�BS�BS�T�D�A�q��1�����2����������'�$%�D�!�$(�$8�$8�D�!��t�~�~�c�!�"�4�'����!�������$�D��D�-�-�d�o�o�=��$�Y�� 9� 9�9�$�,�,�F�H�A�!�^�^�a�/�D�N�����T�)�)�*��-�-��A��!��!���
�A�a�D� ��
&����s�?L
�
	L�LN)rlrmrnror(rGr)rrrrr*rWrpr*r1r/r{r{�sg���
�j�&�y�7d�e�+�H�;_�`�+�H�;U�V�&�x��?�0K�'L�TO�P�#�H�3K�L�
�H��=r1r{c�$�eZdZd�Zd�Zd�Zd�Zy)�LogValueAxisc��|jtt|j�t|j�z
�z|_|j
Sr�)r�ru�
math_log10rRrQr�rrs r/rOzLogValueAxis._calcScaleFactorGsD��
!�L�L�5��t�~�~�&��D�N�N�)C�C�,E�E���� � � r1c��|j}|j}t||jd|j��}t||jd|j��}|�|}|�|}||kDr$t
d|jj|fz��|dkr%t
|jj�d|�d���|j}|r�t|�}t|�}t|�s||f}|dxsd}	|dxsd}
|j|	|
zz
}||z
t|�z}||	|zz}||
|zz
}t|d|z�}t!|d|z�}||_||_y)Nr)r<z7%s: valueMin=%r should not be greater than valueMax=%r!z: valueMin=z! negative values are not allowed!rHr�)r.r/rCr�r<rFr�r��_LogValueAxis__name__valueMinrlr5r�r&r�rurArErQrR)
rUrMr.r/�aMin�aMaxr}�lMin�lMax�a0�a1r�r�s
             r/rKzLogValueAxis._setRangeQsu���=�=���=�=���
�4�?�?�1�t�G]�G]�^���
�4�?�?�1�t�G]�G]�^�����X����X��H���V�Z^�Zh�Zh�Zy�Zy�|D�ZE�E�F�
F��Q�;��SW�Sa�Sa�Sj�Sj�ks�t�u�u��"�"����d�#�D��d�#�D���:�S�#�X�s��Q���1�B��Q���1�B�����R��(�A��t�)�U�1�X�%�B��B�r�E�M�D��B�r�E�M�D��8�B��H�-�H��8�B��H�-�H�!���!��r1c�X�t|j�x}}t|j�x}}|j}|r6|dvrt	|�}||kr|dzn|}|dvrt	|�}||kDr|dz
n|}gj
}t	|�}||kr|dz
}t	|�|z
dz}	t
t	|	|jz�d�}||	z|jkDr|dz
}||_	||kDrn||k\r|d|z�||z
}�||k7r
d|z|_||k7r
d|z|_|jS)NrhrHrgr�)
r�rQrRr7rJrrEr*�	_powerIncr)
rUr.rur/rvrZr�r+r�r�s
          r/r�zLogValueAxis._calcTickPositionslsD��$�T�^�^�4�4��4�$�T�^�^�4�4��4�
�_�_��
��'�'���M��%&�x�Z�A��E�Q���%�%���M��%&�x�Z�A��E�Q���I�I��
��]��
�h�;��a�����M�B���"����A�d�'�'�'�(��+���Q�3�t� � � �!�q�&�!������(�{�E��8�|�Q�r�2�v�Y��!�G�B���T�>�B��L�4�>��T�>�B��L�4�>��z�z�r1c�D�t|d�s|j�|j}t|d��sYgj}t	|j
�}t	|j�dz}t|�}|j}|dk(r�dt|j�z}d}|jdk(rd}||kr�t||j�D]5}	||	zd|zz}
|
|j
kDs�|
|jks�.||
��7||z
}||kr�Ynit|jdz|dz
�}|r||zdk(r||z}n
|dz}|r�d}t|�}	d|z}
|
|jk\rn|
|vr||
�||z
}�'|j|_|j|_|S)Nr\r�rHr�r8r)rbrcr\rr�rQrR�roundr�rur�r�rArr�)rUr�r+r.r/r�r��facrvr�rL�ngs            r/r�zLogValueAxis._calcSubTicks�s����t�M�*��"�"�$������t�,�-��	�	�A�!�$�.�.�1�H�!�$�.�.�1�!�3�H��x��B����A��!�t��5����1�1�����?�?�b�(�!�%��8�m�"�5����9�!����E�2�r�6�N���t�~�~�-�!�d�n�n�2D��a�D�!��!�G�B��8�m������*�1�Q�3�/����B���{��R�����!�G�B�	��A��8�_����B��A��D�N�N�*�E���|��!���!�G�B��#$�*�*�D���.�.����
r1N)rlrmrnrOrKr�r�r*r1r/r�r�Es��!�"�6�8&r1r�c��eZdZd�Zy)�LogAxisTickLabellerc�j�t|�}t|dkr|dz
n|dz�}|dk(ry|dk(ryd|zS)Nr���MbP?�1rH�10z10<sup>%s</sup>)r�rJ)rUrhr�r6s    r/rjzLogAxisTickLabeller.__call__�sC���u����1�Q�3��%��A�e�G�,���a�4���a�4�� �1�$�$r1N)rlrmrnrjr*r1r/r�r��s��%r1r�c��eZdZdZd�Zy)�LogAxisTickLabellerSzZsimple log axis labeller tries to use integers
    and short forms else exponential formatc���t|�}t|dkr|dz
n|dz�}|dk(ry|dkDrd|dzzndd|zdzzdz}d|z}t|�t|�kr|S|S)Nrr�r�rdz0.rHz%.0e)r�rJr9)rUrhr�r6�pr��ses       r/rjzLogAxisTickLabellerS.__call__�sz���u����1�Q�3��%��A�e�G�,���a�4���1��C��#��I�$�!�A�#��s�
�"3�C�"7��
�e�^����W�S��V�^�r�*��*r1Nr#r*r1r/r�r��s��/�+r1r�c��eZdZd�Zy)�LogAxisLabellingSetupc�b�t��tt�|_|jdk(r4d|j_d|j_d|j_n3d|j_d|j_d|j_t�|_	yt�|_	y)NrHr6r�rr�)r"rr!rFr�r�rr�r�r+r�rrs r/rWzLogAxisLabellingSetup.__init__�sz���)�1�&�9�D�K�����!�(+����%�!#�����!"�����(+����%�!"�����!#�����#6�#8�D� �#7�#9�D� r1Nryr*r1r/r�r��s��
:r1r�c�*�eZdZee��Zd�Zd�Zy)�
LogXValueAxis�r!c�X�tj|�tj|�yr))r�rWr�rrs r/rWzLogXValueAxis.__init__�������D�!��&�&�t�,r1c��d}|jsJ|��|�d}|dk(r/|j|jt|j�zz
S|j|jt|�t|j�z
zzS�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�rr`)rGrfr�r�rQ�rUr��msgs   r/rdzLogXValueAxis.scale����B�����$��$���=��E��B�;��7�7�T�.�.��D�N�N�1K�K�K�K��w�w��*�*�j��.?�*�T�^�^�B\�.\�]�]�]r1N)rlrmrnr(r�r*rWrdr*r1r/r�r��s���J�'�H�-�^r1r�c�*�eZdZee��Zd�Zd�Zy)�
LogYValueAxisr�c�X�tj|�tj|�yr))rGrWr�rrs r/rWzLogYValueAxis.__init__�r�r1c��d}|jsJ|��|�d}|dk(r/|j|jt|j�zz
S|j|jt|�t|j�z
zzSr�)rGrgr�r�rQr�s   r/rdzLogYValueAxis.scale�r�r1N)rlrmrnr(rGr*rWrdr*r1r/r�r��s���J�'�H�-�^r1r�r)W�__version__ro�mathrr��reportlab.lib.validatorsrrrrrr	r
rrr
rrrrr�reportlab.lib.attrmap�
reportlab.libr�reportlab.graphics.shapesrrrrrrrr�reportlab.graphics.widgetbaserr�$reportlab.graphics.charts.textlabelsrr r!r"r�r#� reportlab.graphics.widgets.gridsr$�reportlab.lib.colorsr%�reportlab.lib.utilsr&r>rCrFrMrOrqr�r�r�rr,r�r�r�r�r�rr!r�r&r�r�r�r�r�rEr'r�rGrPrwr{r�r�r�r�r�r�r*r1r/�<module>r�s��
��	��<%�G�G�G�G�G�$�$�}�}�}�I�]�]�;�7�&�%�
G�a�b�
�"�"�<E�E�NC�C�J7�7�$j�V�j�X�h��B6�6�B6�He�e�;�;�z�g��,o�G�L�o�bo�G�L�o�b0�0�/��W	1��W	1�rI���I�jT��;����Y��*/�0��
Y��z�:�z�xI���I�V>�>�D2�]�:�2�
T�J�T�li�9�i�X%�,�%�	+�<�	+�:�:� ^�L�!6�z�^�0^�L�!6�z�^r1

Zerion Mini Shell 1.0