+
    bIiai                       R t Rt^ RIHt ^ RIHt ^ RIHtH	t	H
t
HtHtHtHtHtHtHtHtHtHtHtHt ^ RI5 ^ RIHt ^ RIHtHtHtHtHtH t H!t!H"t" ^ RI#H$t$H%t% ^ R	I&H't'H(t(H)t)H*t* ^ R
I+H,t, ^ RI-H.t. ^ RI/H0t0 ^ RI1H2t2 RKR lt3RKR lt4RKR lt5R t6 ! R R4      t7 ! R R4      t8 ! R R4      t9 ! R R4      t: ! R R]$4      t; ! R R](4      t< ! R R ];4      t=R! t>R" t? ! R# R$4      t@ ! R% R&]@4      tA ! R' R(]@]=4      tB ! R) R*]A]=4      tC ! R+ R,4      tDR- tE ! R. R/];4      tF ! R0 R1]@]F4      tG. RLOtH. RMOtIR2 tJ ! R3 R4]4      tK]K! 4       tLRNtM ! R5 R6]G4      tN ! R7 R8]A]F4      tO ! R9 R:4      tP ! R; R<]P]G4      tQ ! R= R>]O4      tR ! R? R@]F4      tS ! RA RB]D4      tT ! RC RD]D4      tU ! RE RF4      tV ! RG RH]S]V]G4      tW ! RI RJ]S]V]O4      tXR# )Oz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                    \        V ^ ,          ^ ,          4      '       d0   V'       d	   WV3R lpMV3R lp\        \        V3R lV 4      4      p \        \        \        V  Uu. uF  q Uu. uF
  qf   K  VNK  	  upNK  	  up4      4      p \	        V 4      ^ 8X  d   V# V! \        \        W04      4      4      pV'       d   V! V! V4      V4      # T# u upi u upi )    c                     V! WV4      # N )Txspecialfuncs   &&&&ڇC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\venv\Lib\site-packages\reportlab/graphics/charts/axes.py<lambda>"_findMinMaxValue.<locals>.<lambda>6   s    ga$6G    c                     W,          # r*   r+   )r,   r-   s   &&r0   r1   r2   8   s    ADr3   c                 *    \        \        W4      4      # r*   )listmap)efs   &&r0   r1   r2   9   s    c!hr3   )r&   r6   r7   filterlen)Vr-   defaultr/   r.   extraMinMaxValuesr9   rs   &&&&&&  r0   _findMinMaxValuer@   3   s    QqT!W~~GA A
sa/2
3VC!D!QQ8Q!!Q8!DEFA
1vqy.T#d+A.?4&'*FQF 9Ds   "C*C4C:CCc           	     (    \        WV\        W4R7      # )zfind minimum over V[i][x]r.   r>   )r@   minr<   r-   r=   r.   r>   s   &&&&&r0   _findMinrE   ?   s    AG``r3   c           	     (    \        WV\        W4R7      # )zfind maximum over V[i][x]rB   )r@   maxrD   s   &&&&&r0   _findMaxrH   C   s    AGaar3   c                R    V  F  p \        V4      V8w  d    ^ # K  	  ^#      ^ # ; i)ztrue if all values are intint)valuesvs   & r0   _allIntrN   G   s/    	1vqyy 
 	s    &c                   0   a  ] tR t^Pt o RtR tR tRtV tR# )AxisLabelAnnotationa/  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                    Wn         W n        R # r*   _v_kwdsselfrM   kwdss   &&,r0   __init__AxisLabelAnnotation.__init__Y       
r3   c                   V P                   P                  4       pVP                  R \        4      pVP                  RR4      p\	        VR4      '       g   VP                  4        V'       d   VP                  MR ! V P                  4      pVP                  '       d   VP                  pTpMTpVP                  pWbR&   WrR&   V! R/ VB # )
labelClass
scaleValueT_tickValuesc                     V # r*   r+   r-   s   &r0   r1   .AxisLabelAnnotation.__call__.<locals>.<lambda>c   s    ar3   r-   yr+   )rT   copypopr   hasattr_pseudo_configurescalerS   isYAxis_x_y)rV   axisrW   r\   r]   svr-   rb   s   &&      r0   __call__AxisLabelAnnotation.__call__]   s    zz XXl51
XXl40
tM**""$&djjK7A<<<AAAAS	S	!D!!r3   rT   rS   N	__name__
__module____qualname____firstlineno____doc__rX   rm   __static_attributes____classdictcell____classdict__s   @r0   rP   rP   P   s     " "r3   rP   c                   0   a  ] tR t^nt o RtR tR tRtV tR# )AxisLineAnnotationaS  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                    Wn         W n        R # r*   rR   rU   s   &&,r0   rX   AxisLineAnnotation.__init__{   rZ   r3   c                  a V P                   P                  4       pVP                  R R4      pVP                  RR4      pVP                  RR4      pVP                  '       d   VP                  pVP
                  pMVP
                  pVP                  pVP                  RR4      pVP                  RR4      p	Ve   V	fi   \        \        VRR4      R	R4      p
V
'       d   \        V
R
4      '       d   V
! 4       p
V
'       d   Vf
   V
^ ,          pV	f
   V
^,          p	MVf   ^ pV	f   ^ p	VP                  RVP                  4      V,           pVP                  R^ 4      V,           p\        W4      \        W4      rVP                  RR4      pVP                  pV'       g	   R Vn         V P                  pV'       d
   W,           pMV'       d	   W,           pVP                  W,
          W,
          VP                  RR4      4      p\        VR4      '       g   VP                  4        VP                  V4      oSV8  g   SV8  d)   V'       g
    Wn        R# SV8  d   VoMVoV3R lVn        V! V4      pVP                  4        F  w  pp\!        VVV4       K  	  \        V R^ 4      '       d   \#        RV RS RV 24       Wn        V#   Yn        i ; i)r]   T	endOffsetFstartOffsetstartNendjoinAxisgetGridDimsrm   hilodrawAtLimitc                     V # r*   r+   r`   s   &r0   r1   -AxisLineAnnotation.__call__.<locals>.<lambda>   s    1r3   parentr^   c                    < S# r*   r+   )r-   ds   &r0   r1   r      s    qr3   _dbgzv=z --> d=z L=)rT   rc   rd   rh   ri   rj   getattrre   _lengthrC   rG   _get_line_posrS   _getLineFuncrf   itemssetattrprint)rV   rk   rW   r]   r   r   offsd0sr8   dimr   r   r   oaglprM   r/   Lkr   s   &&                 @r0   rm   AxisLineAnnotation.__call__   sc   zz XXl40
HH[/	hh}U3<<<77DB77DBHHWT"HHU4 9	'$z$7dKCws:..e9#a&a9#a&a9!a9!aXXd4<<(+XXd1b "jR2hh}U3""!,D	'AFF$$QVAF488HT3JKD4..&&(""1%Atqt"4 "' R4AA%0"QAzz|!!A $tF1%%1#WQCs1#./!& "'s    )K =K A?K A-K Kro   Nrp   rx   s   @r0   r{   r{   n   s     6 6r3   r{   c                   0   a  ] tR t^t o RtR tR tRtV tR# )AxisBackgroundAnnotationzCreate 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                    Wn         W n        R # r*   _colorsrT   )rV   colorsrW   s   &&,r0   rX   !AxisBackgroundAnnotation.__init__   s    
r3   c           
        V P                   pV'       g   R # V P                  P                  4       pVP                  pV'       d   VP                  pVP
                  pMVP
                  pVP                  pVP                  RR 4      pVP                  RR 4      pVe   Vfi   \        \        VRR 4      RR 4      p	V	'       d   \        V	R4      '       d   V	! 4       p	V	'       d   Vf
   V	^ ,          pVf
   V	^,          pMVf   ^ pVf   ^ p\        VR4      '       g   VP                  4        \        VRR 4      p
V
'       g   R # \        4       p\        V4      pVP                  V
^ ,          4      p\        ^\        V
4      4       EFV  pVP                  W,          4      pW.^,
          V,          ,          pV'       Ed   V'       d   TpTpW,
          pW,
          pMTpTpW,
          pW,
          p\        V\        4      '       d   \!        VVVVVR R7      pM\        V\         4      '       dC   \!        VVVV4      pVP"                   F#  pVR9  g   K  \%        VV\        VV4      4       K%  	  MX\        V\&        4      '       dC   \'        VVVVR7      pVP"                   F#  pVR9  g   K  \%        VV\        VV4      4       K%  	  VP)                  X4       TpEKY  	  V# )	Nr   r   r   r   rm   r^   )	fillColorstrokeColor)r-   rb   widthheight)r   rT   rc   rh   ri   rj   rd   r   re   rf   r   r;   r   range
isinstancer%   r   __dict__r   r$   add)rV   rk   r   rW   rh   r   r   r   r8   r   tvGncolorsv0iv1crb   r-   r   r   r?   r   s   &&                     r0   rm   !AxisBackgroundAnnotation.__call__   s]   vzz ,,77DB77DBHHWT"HHU4 9	'$z$7dKCws:..e9#a&a9#a&a9!a9!atM**""$T--6Gf+1&qR!A##BE*B!W}%AqAAUFCEAAEESFa&&QqvdKA$''Qqv.AZZ$>>#Aa!5 (  *--"QfEAZZ$>>#Aa!5 ( aB7 "8 r3   r   Nrp   rx   s   @r0   r   r      s     : :r3   r   c                   6   a  ] tR t^t o RtR tR tR tRtV t	R# )TickLUz$lookup special cases for tick valuesc                @    VP                  R R4      V n        Wn        R# )accuracy:0yE>N)rd   r   r,   )rV   r,   rW   s   &*,r0   rX   TickLU.__init__   s    D1r3   c                z    V P                   pV P                   F  w  r4\        W1,
          4      V8  g   K   R # 	  R# TF)r   r,   absrV   tr   r-   rM   s   &&   r0   __contains__TickLU.__contains__  s1    ==66CA13x   r3   c                    V P                   pV P                   F)  w  r4\        W1,
          4      V P                   8  g   K'  Vu # 	  \        R V,          4      h)zcannot locate index %r)r   r,   r   
IndexErrorr   s   &&   r0   __getitem__TickLU.__getitem__  sE    ==66CA13x%  1A566r3   )r,   r   N)
rq   rr   rs   rt   ru   rX   r   r   rv   rw   rx   s   @r0   r   r      s     .7 7r3   r   c                      a  ] tR tRt o R tR tR tR tR tRR lt	R. / 3R	 lt
RR. 3R
 ltRR. 3R ltRR ltR t]! ]4      tR t]! ]4      tRR ltR tR tRtV tR# )_AxisGi  c                L    V P                  V4      p V^ ,          pV#     T# ; i)r(   )rg   )rV   rM   s   &&r0   r   _AxisG._get_line_pos  s3    JJqM	!A 	s   	 #c                    V P                  V4      p\        WP                  V,           WP                  V,           4      # r*   )r   r   rj   )rV   r-   r   r   s   &&&&r0   _cxLine_AxisG._cxLine  s/    q!Aww77S=99r3   c                    V P                  V4      p\        V P                  V,           WP                  V,           V4      # r*   )r   r   ri   )rV   rb   r   r   s   &&&&r0   _cyLine_AxisG._cyLine  s1    q!DGGeOQ#q99r3   c           	         V P                  V4      pV P                  V,           pV P                  V,           p\        Wg4      \        Wg4      rvW,           p\	        WWV,           WV,           .^R7      #    )strokeLineJoin)r   rj   rC   rG   r   )	rV   r-   r   r   _3d_dx_3d_dyy0y1x1s	   &&&&&&   r0   	_cxLine3d_AxisG._cxLine3d  s^    q!WWu_WWs]RCJBZbF2i8JJr3   c                    V P                  V4      pV P                  V,           pV P                  V,           p\        Wg4      \        Wg4      rvW,           p\	        WaWd,           WV,           V.^R7      # r   )r   ri   rC   rG   r   )	rV   rb   r   r   r   r   x0r   r   s	   &&&&&&   r0   	_cyLine3d_AxisG._cyLine3d'  s^    q!WWu_WWs]RCJBZbif9R8JJr3   Nc                ,   \        VR R4      pVeJ   \        VRR4      pV P                  ;'       d    V P                  ;'       g    V P                  pWWdV3R l# V P                  ;'       d    V P                  ;'       g    V P
                  pWV3R l# )r   Nr   c                     V! WW$VR 7      # ))r   r   r+   )rM   r   r8   r9   r   r   s   &&&&&&r0   r1   %_AxisG._getLineFunc.<locals>.<lambda>4  s    aPQTUkqNrr3   c                     V! WV4      # r*   r+   )rM   r   r8   r9   s   &&&&r0   r1   r   7  s
    !A(r3   )r   rh   r   r   r   r   )rV   r   r   r   r   r   r9   s   &&&&   r0   r   _AxisG._getLineFunc/  s~    .VHT2F//AA4>>A$qfrr--==A$q::r3   c                  a V P                  W#V
4      p\        V R 4      '       g   V P                  4        S'       d*   V P                  ;'       d    V3R l;'       g    V3R lpMRpV P                   F  pV! V4      pV'       d   V! V4      '       d   K#  VVn        VVn        VVn        VVn        VVn	        V	Vn
        W9   d.   W,          P                  4        F  w  pp\        VVV4       K  	  VP                  V4       K  	  R# )r^   c                 "   < V P                   S9   # r*   )r   lexcludes   &r0   r1   #_AxisG._makeLines.<locals>.<lambda>>  s    addgor3   c                 "   < V P                   S9   # r*   )r   r   s   &r0   r1   r   >  s    QTTU\_r3   N)r   re   rf   rh   r^   r   strokeWidthstrokeDashArrayr   strokeLineCapstrokeMiterLimitr   r   r   )rV   gr   r   r   r   r   r   r   r   r   r   specialsr/   exfr   r   arM   s   &&&&&&&&&&&f&      r0   
_makeLines_AxisG._makeLines9  s      62tM**""$,,>>$=]]C\CC!!AG3q668 + +$3!#1 "/%5"='{002!!A  3a "r3   c                   V P                   pV P                  ;'       g    ^ pV'       Ed"   V'       Ed   V P                  '       Ed   V P                  pV P                  pVe   VfQ   V'       d   \        VR4      '       d   V! 4       pV'       d   Vf
   V^ ,          pVf
   V^,          pMVf   ^ pVf   ^ pV'       g	   V'       d   V P                  '       d   V P                  p	MV P                  p	V P                  WV	,
          W,
          WVV P                  V P                  V P                  V P                  W4\        V R/ 4      R7       V P                  WV. R7       R# ))this is only called by a container objectNrm   _gridSpecials)r   r   r   )r   )gridStrokeColorgridStrokeWidthvisibleGrid	gridStartgridEndre   rh   ri   rj   r   gridStrokeDashArraygridStrokeLineJoingridStrokeLineCapgridStrokeMiterLimitr   _makeSubGrid)
rV   r   r   r   r   r   wr   r8   r   s
   &&&&&     r0   makeGrid_AxisG.makeGridO  s<       %%A1t'''AAyAI73z22%Cyc!f!yc!f!ya!ya!A<<<!WWdD&D4L4LTMdMdeie{e{  }A  }V  }V  ^d  ~E  FJ  KZ  []  ~^  _!r2r3   c                   \        V R^ 4      '       d   V P                  ^ 8  g   R# V P                  pV P                  ;'       g    ^ pV'       d	   V'       g   R# V P                  pV P
                  pVe   VfQ   V'       d   \        VR4      '       d   V! 4       pV'       d   Vf
   V^ ,          pVf
   V^,          pMVf   ^ pVf   ^ pV'       g	   V'       d   V P                  '       d   V P                  p	MV P                  p	V P                  4       p
 V P                  WV	,
          W,
          WVV P                  V P                  V P                  V P                  W4R7       Wn        R# R#   Yn        i ; i)r   visibleSubGridNrm   )r   r   )r   
subTickNumsubGridStrokeColorsubGridStrokeWidthsubGridStart
subGridEndre   rh   ri   rj   _calcSubTicksr   subGridStrokeDashArraysubGridStrokeLineJoinsubGridStrokeLineCapsubGridStrokeMiterLimitr^   )rV   r   r   r   r   r   r  r   r8   r   otvs   &&&&&      r0   r  _AxisG._makeSubGride  sG   -a00T__Q5F####((qQOO9	ws:..e9#a&a9#a&a9!a9!a|||DGGT$$$&C'D&D4O4OPTPjPjko  lE  lE  FJ  Fb  Fb  jp  A#&   $' s   AE/ /E7c                    Vf*   V P                   V P                  3V P                  ,          pVf   WP                  ,           pW3# r*   )ri   rj   rh   r   )rV   r   r   s   &&&r0   r   _AxisG.getGridDims  s9    =477477"3DLL"A%;eLL0yr3   c                    \        V R R4      ^8X  d   R# V P                  P                  pV^ ,          R8H  ;'       g    VR,          R8H  # )
_dataIndexNTY:N   NAdjYr   	__class__rq   rV   acns   & r0   rh   _AxisG.isYAxis  sB    4T*A-dnn%%1vs{--c"gvo-r3   c                    \        V R R4      ^ 8X  d   R# V P                  P                  pV^ ,          R8H  ;'       g    VR,          R8H  # )r  NTXN   NNormalDateXr  r  s   & r0   isXAxis_AxisG.isXAxis  sC    4T*A-dnn%%1vs{55c#h55r3   c                h    Vf   \        V R. 4       V F  pVP                  V! V 4      4       K  	  R # )Nannotations)r   r   )rV   r   Ar-   s   &&& r0   addAnnotations_AxisG.addAnnotations  s+    9gd=4AEE!D'N r3   c                2   \        V R . 4      R,          p/ pR Fe  p. P                  p. P                  pV F'  p\        Wc^ 4      '       d   V! V4       K  V! V4       K)  	  VP                  W#&   VP                  VR&   Kg  	  VR;;,          V,          uu&   V# )r'  :NNNlateearly
beforeAxis	afterAxisbeforeTicks
afterTicksbeforeTickLabelsafterTickLabelsr,  )r   append__self__)rV   r(  DrM   RPr   s   &      r0   _splitAnnotations_AxisG._splitAnnotations  s    Dr*1-*A 		A		A1q>>aDaD	 
 ::AD::AaD* 	
&	Q	r3   c                   \        4       pV P                  4       pV P                  WR ,          4       V P                  '       d   V P                  WR,          4       VP	                  V P                  4       4       V P                  WR,          4       V P                  WR,          4       VP	                  V P                  4       4       V P                  WR,          4       V P                  WR,          4       VP	                  V P                  4       4       V P                  WR,          4       V P                  WR,          4       V# r-  )r   r:  r)  visibler   makeAxis	makeTicksmakeTickLabels)rV   r   r(  s   &  r0   draw_AxisG.draw  s    G""$Aj)<<<L/2EE$--/"K.1M"23EE$.."#L/2$6"78EE$%%'($5"67Ai(r3   )r^   r*   NN)rq   rr   rs   rt   r   r   r   r   r   r   r   r  r  r   rh   propertyr$  r)  r:  rA  rv   rw   rx   s   @r0   r   r     s     ::KK; BF  OQ  [] , !R 3, !%D '4
. wG6 wG
$ r3   r   c                   J   a  ] tR tRt o ]! ]]! ]RR7      R7      tR t	Rt
V tR# )CALabeli  z?where in the category range [0,1] the labels should be anchoreddesc)BASElabelPosFracc                X    \         P                  ! V 3/ VB  V P                  R R7       R# )      ?)rJ  N)r    rX   _setKeywordsrV   kws   &,r0   rX   CALabel.__init__  s+    $$$" 	 	r3   r+   N)rq   rr   rs   rt   AttrMapr    AttrMapValuer   _attrMaprX   rv   rw   rx   s   @r0   rF  rF    s&     H#H3tu
H r3   rF  c                      a  ] tR tRt o Rt^t]! Rb/ R]! ]RR7      bR]! ]RR7      bR]! ]R	R7      bR
]! ]RR7      bR]! ]RR7      bR]! ]	RR7      bR]! ]
RR7      bR]! ]RR7      bR]! ]! ^ ^^4      RR7      bR]! ]! ^ ^^4      RR7      bR]! ]	RR7      bR]! ]	RR7      bR]! ]
RR7      bR]! ]RR7      bR ]! ]! ^ ^^4      R!R7      bR"]! ]! ^ ^^4      R#R7      bR$]! ]	R%R7      bR&]! ]R'R7      bR(]! ]R)R7      bR*]! ]R+R7      bR,]! R-R.R7      bR/]! ]R0R7      bR1]! R-R2R7      bR3]! ]R4R7      bR5]! ]R6R7      bR7]! ]! R8R9R:4      R;4      bR<]! ]! R=R>R?R@4      RAR7      bRB]! ]RCR7      bRD]! ]RER7      bRF]! ]
RGR7      bRH]! ]	RIR7      bRJ]! ]	RKR7      bRL]! R-RMR7      bRN]! ]	ROR7      bRP]! ]	RQR7      bRR]! ]! RSRTRURV4      RW4      bRX]! ]RYR7      b tRZ tR[ tRcR\ ltR] tR^ tR_ tR` tRatV tR-# )dCategoryAxisi  z+Abstract category axis, unusable in itself.r=  Display entire object, if true.rG  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   #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lowrk   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                ~   V P                   P                  R 8w  g   Q R4       h^2V n        ^2V n        ^dV n        ^ V n        ^V n        ^V n        ^V n        ^V n	        ^ V n
        RV n        ^V n        \        R,          V n        \        R,          V n        \        R,          ;V n        V n        \        R,          ;V n        V n        \        R,          ;V n        V n        RV n        \        R,          V n        \        R,          V n        R	;V n        V n        \        R,          V n        \        R,          V n        \        R,          V n        \7        \8        4      V n        R	V n        R	V n        R	V n         R	V n!        R
V n"        ^ V n#        RV n$        R	V n%        ^ V n&        ^ V n'        ^ V n(        ^ V n)        ^ V n*        R	# )rU  z(Abstract Class CategoryAxis InstantiatedFr   r   r   r   r         ?Nrk   rw  )+r  rq   ri   rj   r   	_catCountr=  rW  rY  r[  r   rl  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rF  rn  rp  r   rr  joinAxisModerz  rt  rv  _labelTextFormatr  r  r  r  r  rV   s   &r0   rX   CategoryAxis.__init__  s   ~~&&6b8bb6  !)-8-.?@8FGW8XX$"56D_6UU!3<JK]<^^!D$9#-m<#12C#D (,,,-=>+O< ./A B-g6 " # !
 !%

r3   c                f    \        V4      V n        \        V4      V n        \        V4      V n        R # r*   floatri   rj   r   rV   r-   rb   lengths   &&&&r0   setPositionCategoryAxis.setPosition&  #    ((V}r3   c                   \        \        \        \        V4      4      4      V n        T;'       gS    V P
                  V P                  ,
          V P                  ,
          \        V P                  ;'       g    ^4      ,          V n	        V P                  4        V P                  R8X  dN   \        V P                  4       UUu. uF$  p\        V Uu. uF  qDV,          NK  	  up4      NK&  	  uppV n        R# R# u upi u uppi )r   r}  N)rG   r6   r7   r;   r  r   r  r  r  	_barWidth_calcTickmarkPositionsrz  r   sum_pmv)rV   multiSeriesbarWidthr   seriess   &&&  r0   	configureCategoryAxis.configure,  s    T#c+"678!fft||DJJ'>tzz'I5QUQ_Q_QdQdcdKe&e##%*MRSWSaSaMbcMbkBkFQiikBCMbcDI +Bcs   C>C9!C>9C>c                8   V P                   pV P                  '       d)   \        V4       Uu. uF  q"R ,           NK  	  upV n        R# V P                  '       d   \        \        RV4      4      V n        R# \        \        V^,           4      4      V n        R# u upi )rL  N)r  r  r   r^   rt  r6   )rV   nr   s   &  r0   r  #CategoryAxis._calcTickmarkPositions3  sl    NN>>>/4Qx8x!#x8D$$$#'b#4 #'ac
#3   9s   Bc                ^    V P                   '       d   V P                  V,
          ^,
          pV# r   )rt  r  rV   idxs   &&r0   _scaleCategoryAxis._scale=  s%       s(:1(<#
r3   c                <    V P                  V4      V P                  3# )z/Returns the position and width in drawing unitsloScaler  r  s   &&r0   rg   CategoryAxis.scaleA  s    S!4>>22r3   c                T    V P                  V4      RV P                  ,          ,           # )z-Returns the bar mid position in drawing unitsrL  r  r  s   &&r0   midScaleCategoryAxis.midScaleE  s    ||C 3t~~#555r3   ))r  r  r  r   r  r^   ri   rj   rp  rl  r   r   r   r   r   r   r   r   r  r  r   r  rr  rz  rn  r  r  rt  r   r   r   r   r   r   rv  r  r=  rW  r   r[  rY  r+   r*   )rq   rr   rs   rt   ru   _nodocrQ  rR  r   r   r	   r   r
   r   r   r   rS  rX   r  r  r  r  rg   r  rv   rw   rx   s   @r0   rU  rU    s'    1F &
y/PQ&
"93PQ&
 $I4RS&
 %Y5TU	&

 #93PQ&
 #82QR&
 #=7VW&
 ''<Ccd&
 %U1Qq\7\]&
 &eAal8^_&
 (6\]&
 'x6LM&
 '};QR&
 ++@Ghi&
 )q1;ef&
  *%!A,<gh!&
"  ,H:ef#&
$ !6[\%&
& ~4WX'&
( $I4cd)&
* d)EF+&
, %%:AZ[-&
.  +DE/&
0 #>8de1&
2 (	8]^3&
4 U:iFGmn5&
6 %U6%	%JQ}~7&
8 !1GH9&
: '~<Z[;&
< '};YZ=&
> X,XY?&
@ X,UVA&
B #4-BCC&
D h-YZE&
F h-VWG&
H  fU6( CDmnI&
J %%5<abK&
HP4l%d436 6r3   rU  c                 n    V P                   '       g#   Q R V P                  P                  ,          4       hR# )z/Cannot connect to other axes (%s), but Y- ones.N)rh   r  rq   rk   s   &r0   _assertYAxisr  I  %    <<<dJT^^MdMddd<r3   c                 n    V P                   '       g#   Q R V P                  P                  ,          4       hR# )z/Cannot connect to other axes (%s), but X- ones.N)r$  r  rq   r  s   &r0   _assertXAxisr  K  r  r3   c                   j   a  ] tR tRt o ^ t]R 4       t]R 4       tR tRR lt	R t
R tRR	 ltR
tV tR# )_XTicksiN  c                0    \        V R V P                  4      # )r  )r   r   r  s   &r0   actualTickStrokeWidth_XTicks.actualTickStrokeWidthQ      t-d.>.>??r3   c                0    \        V R V P                  4      # )r  )r   r   r  s   &r0   actualTickStrokeColor_XTicks.actualTickStrokeColorU  r  r3   c                   \        V R R4      pV'       d   V! WW#4       R# V'       g	   V'       d   V P                  pV P                  pV'       d2   V'       d   V'       g
   We,          pMV'       d   V'       g	   We,          pV P                  W1V) V P                  WPP
                  V P                  V P                  V P                  4	       R# R# )r  N)	r   r  _tickTweaksr   r  r   r   r   r   )rV   tUtDr   itdsWtWs   &&&&   r0   _drawTicksInner_XTicks._drawTicksInnerY  s    d?402++B!!BbBBOOA"T%?%?CWCWX\XkXklpl~l~  @D  @U  @U  V r3   Nc                v    T;'       g    \        4       pV P                  '       d   V P                  WV4       V# r*   )r   rY  r  )rV   r  r  r   s   &&&&r0   
_drawTicks_XTicks._drawTicksg  s0    LL  q)r3   c                    \        V R ^ 4      '       dH   V P                  ^ 8  d5   V P                  4       p ^V n        V P	                  WV4       V =W@n        R# R# R#   T =Y@n        i ; i)visibleSubTicksN)r   r  r  _subTickingr  r^   )rV   r  r  r   r  s   &&&& r0   _drawSubTicks_XTicks._drawSubTicksm  sm    4)!,,1B$$&C'#$ $$R1-$#&  2C, $#& s   A 
A'c                "   V P                   p V P                  \        V R R4      4      V n         V P                  V P                  V P
                  4      pV P                  \        V R^ 4      \        V R^ 4      V4       VWn         #   Yn         i ; itickAxisModerk   	subTickHi	subTickLo)rj   _labelAxisPosr   r  tickUptickDownr  )rV   yoldr   s   &  r0   r?  _XTicks.makeTicksw  sw    WW	((nV)LMDGDMM:AwtK:74TU;VWXYGdG   A1B Bc                    V P                   pV'       dN   T;'       g    V P                  pVR 8X  d   VP                  # VR8X  d   VP                  VP                  ,           # V P                  # r|  r{  )r   rz  rj   r   rV   moderk   s   && r0   r  _XTicks._labelAxisPos  T    }}--4--Du}wwww--wwr3   )r  r^   rj   r*   )rq   rr   rs   rt   r  rD  r  r  r  r  r  r?  r  rv   rw   rx   s   @r0   r  r  N  sS     K@ @ @ @V' r3   r  c                   0   a  ] tR tRt o RR ltR tRtV tR# )_YTicksi  Nc                    V P                   pV'       dN   T;'       g    V P                  pVR 8X  d   VP                  # VR8X  d   VP                  VP                  ,           # V P                  # r  )r   rz  ri   r   r  s   && r0   r  _YTicks._labelAxisPos  r  r3   c                "   V P                   p V P                  \        V R R4      4      V n         V P                  V P                  V P
                  4      pV P                  \        V R^ 4      \        V R^ 4      V4       VWn         #   Yn         i ; ir  )ri   r  r   r  	tickRighttickLeftr  )rV   xoldr   s   &  r0   r?  _YTicks.makeTicks  sw    WW	((nV)LMDGt}}=AwtK:74TU;VWXYGdGr  )ri   r*   )rq   rr   rs   rt   r  r?  rv   rw   rx   s   @r0   r  r    s      r3   r  c                      a  ] tR tRt o Rt]! ]]! ]RR7      ]! ]RR7      ]! ]	! RRRR	R
4      RR7      R7      t
^ tR tR tRR ltR tR tR tR tRtV tR
# )XCategoryAxisi  zX/category axisTick length up the axis.rG  Tick length down the axis.r  r  valuepointsNIMode used for connecting axis ('bottom', 'top', 'value', 'points', None).)rI  r  r  r  c                    \         P                  V 4       R V P                  n        RV P                  n        ^ V n        ^V n        R# r  N)rU  rX   rn  	boxAnchordyr  r  r  s   &r0   rX   XCategoryAxis.__init__  s7    d# # r3   c                   V P                  ^^F^4       V P                  R.4       . ROV n        RV P                  n        RV P                  ^,          n        ^ZV P                  ^,          n        \        ^^d4      pVP                  V 4       V# )   r  r8   
      r  (   2   )OneTwoThreeFourFiver  r  rp  rn  r  angler   r   rV   r   s   & r0   demoXCategoryAxis.demo  st    R%()*@ ##&A !AC	dr3   c                   \        V4       VR8X  d   VP                  V n        R# VR8X  d%   VP                  VP                  ,           V n        R# VR8X  d   VP                  V4      V n        R# VR8X  d	   W0n        R# R# )!Join with y-axis using some mode.r  r  r  r  Nr  rj   r   rg   rV   yAxisr  poss   &&&&r0   
joinToAxisXCategoryAxis.joinToAxis  sa    U8hhDGU]hh.DGW_kk#&DGXG r3   c                    V P                   pV'       dP   V P                  pVR9   d   V P                  WR7       R# VR9   d    V P                  WV P                  R7       R# R# R# r  r  r  r  N)r  r  r  r  r   r  r  rr  rV   jajams   &  r0   _joinToAxisXCategoryAxis._joinToAxis  Y    ]]##C''-++$2B2BC ,	 r3   c                    V P                   V P                  ,           V P                  V4      V P                  ,          ,           # )z'returns the x position in drawing units)ri   r  r  r  r  s   &&r0   r  XCategoryAxis.loScale  s,    ww#dkk#&6t~~&EEEr3   c                   \        4       pV P                  4        V P                  '       g   V# \        V P                  V P
                  ,
          V P                  V P                  V P                  ,           V P                  ,           V P                  4      pV P                  Vn	        V P                  Vn
        V P                  Vn        VP                  V4       V# r*   r   r'  rW  r   ri   r  rj   r   r  r   r   r   r   rV   r   rk   s   &  r0   r>  XCategoryAxis.makeAxis      GDGGDKK'$''DLL2H2TVZV]V]^++++#33	dr3   c                d   \        4       pV P                  '       g   V# V P                  pVEe   V P                  p\	        V4      pV P
                  pV P                  pV P                  4       pV P                  pV P                  R8X  d   V P                  MR p	\        V4       EF  p
V'       d   W:,
          ^,
          pMT
pW8  d   K&  W,
          pWP                  9   d   V P                  V,          pMV P                  V
,          pV	'       d,   VP                  pW,          ;qn
        V^ 8  d
   VR,          pM^ pVP                  pWV,           V,          ,           pVP                  VW},           4       TP!                  W+,          ;'       g    R4       VP#                  V4       EK	  	  V# Nr}   )r   r[  rp  r  r;   rt  r  r  ri   rz  r  r   rn  r  rJ  	setOriginsetTextr   )rV   r   rp  catCountr  rt  r  rj   ri   pmvr   iclabel_dyrM   lpfr-   s   &                r0   r@  XCategoryAxis.makeTickLabels  sV   G!!!!8**$~~HM"A#44~~H##%BB#119<$))$C8_#(*Q,Rb5(jKK' KK.E KKNE((C%(W,A
sC2ICC((C%8++"&)m/5526e' %* r3   )rj   rp  r  r  r  Nrq   rr   rs   rt   ru   rQ  rU  rR  r   r
   rS  r  rX   r  r  r'  r  r>  r@  rv   rw   rx   s   @r0   r  r    sz     Lh+--/#E(E7Hd$S\^
H J
DF$ $r3   r  c            
          a  ] tR tRt o Rt]! ]]! ]RR7      ]! ]RR7      ]! ]	! R4      RR7      R7      t
^tR	 tR
 tRR ltR tR tR tR tRtV tR# )YCategoryAxisi  zY/category axisTick length left of the axis.rG  Tick length right of the axis.NIMode used for connecting axis ('left', 'right', 'value', 'points', None).)rI  r  r  r  c                    \         P                  V 4       R V P                  n        RV P                  n        ^V n        ^ V n        R# r8   Nr  )rU  rX   rn  r  dxr  r  r  s   &r0   rX   YCategoryAxis.__init__   s7    d# # r3   c                   V P                  ^2^
^P4       V P                  R.4       . ROV n        RV P                  n        RV P                  ^,          n        ^ZV P                  ^,          n        \        ^^d4      pVP                  V 4       V# )r  r8   r   )r  r	  r  )r  r  r  r  r  s   & r0   r  YCategoryAxis.demo)  sr    R$
|$2 ##&A !AC	dr3   c                <   \        V4       VR8X  d   VP                  R,          V n        R# VR8X  d,   VP                  VP                  ,           R,          V n        R# VR8X  d    VP                  V4      R,          V n        R# VR8X  d   VR,          V n        R# R# z!Join with x-axis using some mode.left      ?rightr  r  Nr  ri   r   rg   rV   xAxisr  r  s   &&&&r0   r  YCategoryAxis.joinToAxis6  sv     	U6>hhnDGW_xx%--/36DGW_kk#&,DGXCiDG r3   c                    V P                   pV'       dP   V P                  pVR9   d   V P                  WR7       R# VR9   d    V P                  WV P                  R7       R# R# R# rM  r   r!  N)rM  rO  r"  r#  r$  s   &  r0   r'  YCategoryAxis._joinToAxisC  r)  r3   c                h    V P                   V P                  V4      V P                  ,          ,           # )z'Returns the y position in drawing units)rj   r  r  r  s   &&r0   r  YCategoryAxis.loScaleL  s#    wwS)$..888r3   c                   \        4       pV P                  4        V P                  '       g   V# \        V P                  V P
                  V P                  ,
          V P                  V P
                  V P                  ,           V P                  ,           4      pV P                  Vn	        V P                  Vn
        V P                  Vn        VP                  V4       V# r*   r   r'  rW  r   ri   rj   r  r   r  r   r   r   r   r.  s   &  r0   r>  YCategoryAxis.makeAxisP  s    GDGGTWWT[[0$''477T\\;QRVR]R];]^++++#33	dr3   c                   \        4       pV P                  '       g   V# V P                  pVEe   V P                  p\	        V4      pV P
                  pV P                  pV P                  pV P                  4       pV P                  p	V P                  R8X  d   V P                  MR p
\        V4       EF  pV'       d   W;,
          ^,
          pMTpW8  d   K&  W,
          pWP                  9   d   V P                  V,          pMV P                  V,          pVP                  pWV,           V,          ,           pV
'       d-   VP                  pW,          ;pVn        V^ 8  d
   VR,          pM^ pVP                  VV,           V4       TP!                  W,,          ;'       g    R4       VP#                  V4       EK  	  V# r2  )r   r[  rp  r  r;   rt  r  rn  r  rj   rz  r  r   rJ  rG  r5  r6  r   )rV   r   rp  r7  r  rt  r  rn  ri   rj   r8  r   r9  r:  r<  rb   _dxrM   s   &                 r0   r@  YCategoryAxis.makeTickLabels]  sc   G!!!!8**$~~HM"A#44~~H[[F##%BB#119<$))$C8_#(*Q,Rb5(jKK' KK.E KKNE((C%8++((C%(W,A
sC2ICC3*m/5526e' %( r3   )ri   rp  r  r  rM  rO  r  r  NrM  Nr?  rx   s   @r0   rA  rA    sr     L02 13#E*T$U\^
H J D9$ $r3   rA  c                   *   a  ] tR tRt o RtR tRtV tR# )TickLabelleri  zlAbstract base class which may be used to indicate a change
in the call signature for callable label formats
c                    R # )zAbstract class instance calledr+   )rV   rk   r  s   &&&r0   rm   TickLabeller.__call__  s    /r3   r+   Nrq   rr   rs   rt   ru   rm   rv   rw   rx   s   @r0   rb  rb    s     0 0r3   rb  c                     R V ,          # )z%.12gr+   r`   s   &r0   r1   r1     s    7Q;r3   c                     a  ] tR tRt o Rt]! R/ R]! ]! ]]	! R4      34      RR7      bR]! ]RR7      bR	]! ]R
R7      bR]! ]RR7      bR]! ]RR7      bR]! ]RR7      bR]! ]
RR7      bR]! ]RR7      bR]! ]RR7      bR]! ]	! ^ ^^4      RR7      bR]! ]	! ^ ^^4      RR7      bR]! ]
RR7      bR]! ]
RR7      bR]! ]R R7      bR!]! ]R"R7      bR#]! ]	! ^ ^^4      R$R7      bR%]! ]	! ^ ^^4      R&R7      bR']! ]
R(R7      bR)]! ]R*R7      bR+]! ]R,R7      bR-]! ]R.R7      bR/]! ]
R0R7      bR1]! ]
R2R7      bR3]! R4R5R7      bR6]! ]	! R7R8R94      R:R7      bR;]! R4R<R7      bR=]! R4R>R7      bR?]! ]R@R7      bRA]! ]RBR7      bRC]! ]RDR7      bRE]! ]RFR7      bRG]! ]RHR7      bRI]! ]! ]]! ]
^ ^^RJ7      34      RKR7      bRL]! ]! ]]! ]
^ ^^RJ7      34      RMR7      bRN]! ]! ]! ]4      ]! ]^ ^^RJ7      34      ROR7      bRP]! ]	! RQRRRSRT4      RU4      bRV]! ]RWR7      bRX]! ]	! RYRZR[4      R\4      bR]]! ]	! RQR^R_RR4      R`R7      bRa]! ]RbR7      bRc]! ]RdR7      bRe]! ]RfR7      bRg]! ]	! R7R8R94      RhR7      bRi]! ]RjR7      bRk]! R4RlR7      bRm]! ]
RnR7      bRo]! ]
RpR7      bRq]! ]
RrR7      bRs]! ]
RtR7      bRu]! ]
RvR7      bRw]! ]RxR7      bRy]! ]RzR7      bR{]! ]
RR7      bR|]! ]R R7      bR}]! ]R"R7      bR~]! ]	! ^ ^^4      R$R7      bR]! ]	! ^ ^^4      R&R7      bR]! ]
R(R7      bR]! ]R*R7      bR]! ]R,R7      bR]! ]
RR7      bR]! ]
RR7      bR]! ]RR7      bR]! ]RR7      bR]! ]RR7      bR]! ]	! RQRRRR4      R4      bR]! ]RR7      bR]! ]RR7      bR]! ]RR7      b tR tR tR tR t]! 4       R 4       tR tR tR tR tR tR tR tR tR t R t!R t"R t#R t$R t%Rt&V t'R4# )	ValueAxisi  z(Abstract value axis, unusable in itself.	forceZeronearzEnsure zero in range if true.rG  r=  rV  rW  rX  r[  r\  rY  rZ  r   r]  r   r^  r   r_  r   r`  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|  rk   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
rangeRoundr  r  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'  r  r  r  r  r  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  r  subTickStrokeWidthz Width of sub ticks if specified.subTickStrokeColorz Color of sub ticks if specified.r  r  keepTickLabelsInsidez?Ensure tick labels do not project beyond bounds of axis if truer  r  r  r  requiredRangezMinimum required value range.r  r  r>   z*extra values to use in min max calculationc                   V P                   P                  R 8w  g   Q R4       hV P                  ! RJ/ VB  V P                  ! RJ/ R^ bR^2bR^2bR^dbR^bR^bR^bR	^bR
^ bR^ bR^bR\        R,          bR\        R,          bR\        R,          bR\        R,          bR\        R,          bRRbR\        R,          bR\        R,          bR\        R,          bR\        R,          bR\        R,          bRRbRRbRRbR^ bR^ bR ^ bR!^ bR"^ bR#\        R,          bR$\        R,          bR%\        R,          bR&RbR'\        R,          bR(\        R,          bR)RbR*RbR+\	        \
        4      bR,^ bR-^
bR.^bR/RbR0R1bR2RbR3RbR4RbR5RbR6RbR7RbR8RbR9RbR:RbR;R<bR=^ bR>R?bR@R<bRARbRBRbRCRbRDR1bRE^ bRF^ bRG^ bRH^ bRIRb  ^ V P                  n        R# )Krh  z%Abstract Class ValueAxis Instantiated_configuredri   rj   r   r=  rW  r[  rY  r   ri  r   r   r   r   r   r   r   r  r   r   r   r   r   r   Nr   rl  Fr  r  r  r  r  r  r  r  r	  r  r  r
  r  rn  r  rk  rl  r  rz  rk   rm  rn  ro  rp  rq  rr  rt  rw  rx  ry  r  r|  rv  r}  r~  r  r  r  r  rt  r  r  r  r>   r+   )r  rq   rM  r   r   r   rn  r  rN  s   &,r0   rX   ValueAxis.__init__  s   ~~&&3\5\\3B R	&'R	
  R	  R	 #&R	 #$R	 '(R	 )*R	 ()R	 '(R	 %&R	" '(#R	$ '5]&C%R	& +99J*K'R	( +99I*J)R	* )7(G+R	, ,::L+M-R	. +//R	0 +9*G1R	2 /==N.O3R	4 /==M.N5R	6 -;?,K7R	8 0>>P/Q9R	: %);R	< #'=R	> (-?R	@ *+AR	B +,CR	D &'ER	F %&GR	H %&IR	J 1??O0PKR	L 0>o/NMR	N 3AAS2TOR	P .2QR	R .<M-JSR	T 2@@Q1RUR	V (,WR	X &*YR	Z "9!?[R	\ 01]R	b .0cR	d ()eR	l ,0mR	n )/oR	p +/qR	r /3sR	t *.uR	~ $(R	@ $(AR	B %)CR	D *.ER	F +/GR	H +0IR	J &,KR	L &'MR	N !)OR	P "(QR	R (,SR	T (,UR	V 15WR	X (.YR	Z *+[R	\  !]R	^  !_R	` '(aR	b +/cR	f r3   c                f    \        V4      V n        \        V4      V n        \        V4      V n        R # r*   r  r  s   &&&&r0   r  ValueAxis.setPosition1  r  r3   c                H    V P                  V4       V P                  4        R# )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)rV   
dataSeriess   &&r0   r  ValueAxis.configure7  s     	z"r3   c                T    V P                  4        V P                  4        ^V n        R# )r   N)r  _calcScaleFactorr  r  s   &r0   r  ValueAxis._configure_endG  s"    ##%r3   c                T    Wn         W n        V P                  4       w  r4W4VR ,          3# )r   )	_valueMin	_valueMax_calcStepAndTickPositions)rV   rp  rq  rr  r,   s   &&&  r0   _getValueStepAndTicksValueAxis._getValueStepAndTicksL  s+    !!446	Yt^++r3   c                T   V P                   pV^ 8  d   W!,
          pWC8  d   RW!,           ,          pVR,          p\        WS,
          V4      p\        WS,           V4      pV^d8  d   V^d8  d   V^d,           V,
          p^dpMV^ 8  d   V^ 8  d   Wv,
          p^ pT;qn        T;q n        W3# )r(   rL  )r  rC   rG   
_cValueMin
_cValueMax)rV   rp  rq  rrr?   mr   y2s   &&&     r0   _preRangeAdjustValueAxis._preRangeAdjustS  s    a4#At*+c	h'h'S=RVcBBBq[RTBB-//?-//?  r3   c                X   V P                   ;r#V P                  ;rEVf(   \        WP                  ^ V P                  4      ;q0n        Vf(   \        WP                  ^ V P                  4      ;qPn        W58X  dl   V^ 8X  dG   Vf/   Vf+   \        V R^ 4      pV^ 8  d   Tp^ pMCV^ 8  d   ^ pTpM7RpRpM2V P                   f   RpM!RpMV^ 8  d   RV,          pRpMRpRV,          p\        V RR4      '       d   \        \        V^^ 4      4      pRpWV,
          ,          p	Wn
        Wpn        WP                  ,          V n        W3R lp
Vf)   \        WP                  ^ WP                  R	7      ;q0n        Vf)   \        WP                  ^ WP                  R	7      ;qPn        V P                  W54      w  r5V P                  pTpTpV P                   pV'       dQ   VR
8X  d/   \#        \%        V4      \%        V4      4      ^WS,
          ,          8*  pV'       d   V^ 8  d   ^ pM	V^ 8  d   ^ pV P&                  p\        V RR4      '       * pT;'       d    Tp\)        V4      '       g   W3p\        V RR4      p\)        V4      '       g   VV3pVR8g  ;'       d    TpV'       d   VR9   pVR9   pM^ ;ppV P*                  pTpV'       d   \)        V4      '       g   VV3p\        V P                  4      pT;'       g    T;'       g    Tp^ pV'       Ed   V^
8:  Ed   V^,          p^ pV'       g
   V'       Ed*   V P-                  W54      w  pppV'       d"   VV^ ,          ,          pVV^,          ,          pM^ ;ppV'       dD   WS,
          V,          p\/        VV^ ,          V,          4      p\/        VV^,          V,          4      pV'       d   V^ ,          p MTp VV,
          p!V^ ,          '       g   \%        V 4      V8  d   V V!V,           8  d   T!p^pV'       d   VR,          p MTp VV,           p!V^,          '       g   \%        V 4      V8  d   V V!V,
          8:  d   T!p^pV'       g   EKa  V P-                  W54      w  pppV'       dE   VV^ ,          V,
          8  d   V^ ,          V,
          p^pMVV^ ,          V,           8  pV^ ,          pV'       g   EK  VVR,          V,           8  d   VR,          V,           p^pEK  VVR,          V,
          8*  pVR,          pEK  V'       d   V'       g	   XV n        MRV n        W0n        WPn        V P6                  p"V P8                  p#V#f   V"e   V P:                  p$V P=                  4        V P4                  V P2                  r5V$e   \%        V$V,
          4      R8  dj   V"'       d   V"V P>                  ,          p%M^ p%V#'       d+   \/        V%WS,
          V#,          V P                  ,          4      p%V ;P2                  V%,          un        V PA                  4        R# )zSet 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|  g{Gz?333333?        _bubblePlotr  c                      V ^,          pW5V,          R,          ,          pV! W,          V,           W,          V,
          4      #   \          d    \        R,          p LSi ; i)   皙?rL  )r   	bubbleMAx)r,   r-   r/   bubbleV	bubbleMaxrM   s   &&&&& r0   r.   $ValueAxis._setRange.<locals>.special  sV    &!A iK#--ADLg66 " &!#A&s   	A AArB   rj  rs  rx  Fr  ư>g{Gzr  r{  r  rz  r  )!rp  rq  rE   r  r>   r  rH   r  r   r  _bubbleV
_bubbleMaxr   _bubbleRadiusr  ry  ri  rC   r   rt  r&   rw  r  rG   _computedValueStepr  r  r  r  r  _calcValueStep
_valueStep_rangeAdjust)&rV   r  oMinrp  oMaxrq  zrpr  fracr  r.   ry  cMincMaxri  abfdo_rrdo_abfabfizrrnrrxabSdo_absaLgoiterrr  r,   fuzzi0i1sfrM   ur  r  r  r  s&   &&                                    r0   r  ValueAxis._setRangeg  sv    --'--'(:oo^_aeawaw:xxX(:oo^_aeawaw:xxX{<DL!$|A6C1u#&#$Q#$#&#'#(]]*$H#HA:"8|H"H"H"8|H4d++hz!A67ID8+,G#M'O!%ll!2D)0 7 |(:oo^_ho  CY  CY  ;Z  ZX|(:oo^_ho  CY  CY  ;Z  ZX!11(D__
NN	& Hc(m<8CT@UU	A:xaZA!!Dd33Szz(C.6U||5LEf$.. 00C 22CMC#""::3h4<< &&f&&bT2XAIDB%)%?%?%S"	1d"3q6)B"3q6)BKB"+R/BRAr	*BRAr	*BAaD"aG!HHAtAdF HBAbE"aG!HHAtAdF HBu%)%?%?%S"	1d!T	)#$Q4	>%qtDy0#$Q43"d
*#$R5?%quTz1#$R5&/D#&*D#!!((((#|'?$($>$>!!!%h$,4I(4R0STX0X$T__4AAAx0,>t||KLA!#r3   c                    V P                   V n        V P                  V n        \	        V R 4      '       d   V =V P                  4        R# )_subTickValuesN)rp  r  rq  r  re   r  r  r  s   &r0   rf   ValueAxis._pseudo_configure  s7    4())t/Br3   c                    R# )zOverride 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+   r  s   &r0   r  ValueAxis._rangeAdjust  s     	r3   c                    R# )zuOverride 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+   r  s   &r0   _adjustAxisTicksValueAxis._adjustAxisTicks  s     	r3   c                    V P                   \        V P                  V P                  ,
          4      ,          V n        V P                  # zoCalculate the axis' scale factor.
This should be called only *after* the axis' range is set.
Returns a number.
)r   r  r  r  _scaleFactorr  s   &r0   r  ValueAxis._calcScaleFactor  s3    
 !LL5$..1P+QQ   r3   c                   \        V R R4      pV'       d
   V =Wn        MV P                  4        V P                  pV P                  pV P
                  pRV,          pV P                  p\        \        V4      V,          4      pWa,          pVR9   d   WrV,           8  d
   V^,          pMWrV,
          8  d
   V^,          p\        \        V4      V,          4      pW,          pVR9   d   WsV,
          8  d
   V^,          pMWsV,           8  d
   V^,          pT\        Wh^,           4       U	u. uF  qV,          NK  	  up	3# u up	i )r  Nr   r  r  )
r   r  r  r  r  r  ry  rK   r  r   )
rV   rr  rp  rq  r  ry  r  rM   r  r   s
   &         r0   r  #ValueAxis._calcStepAndTickPositions$  s   D!5d;	''O!I>>>>I~__
x*+L))$a}_bAgbx*+L++$a}_bAgbuR1~>~!I++~>>>>s   +E c                0    V P                  4       ^,          # r  )r  r  s   &r0   _calcTickPositionsValueAxis._calcTickPositions<  s    --/22r3   c                    \        V R 4      '       g   V P                  4        V P                  p\        V R4      '       Eg'   V P                  P                  pVR,          R8X  d
   ^ p\
        pMRpR pV Uu. uF  p\        VR^4      '       g   K  VNK  	  pp. P                  p\        V P                  4      p\        V4      p	V	^8  d
   . V n
        EMV	^8X  d   V^,          V^ ,          ,
          p
McV	^8X  d8   \        V^,          V^ ,          ,
          V^,          V^,          ,
          4      p
M%V	^,          p	Wi^,           ,          Wi,          ,
          p
W,          pV P                  V,           pV P                  V,
          pV^ ,          V8  d!   VP                  ^ V^ ,          V
,
          4       VR,          V8  d    VP                  VR,          V
,           4       V
\        V^,           4      ,          p
\!        VRR 4       FK  w  r\#        V4       F7  pW! V^,           V
,          4      ,           pVV8:  g   VV8  d   K/  V! V4       K9  	  KM  	  VP$                  V n
        V P                  V n        V# u upi )	r^   r  r!  r#  r   c                     V # r*   r+   r`   s   &r0   r1   )ValueAxis._calcSubTicks.<locals>.<lambda>J  s    r3   _doSubTicksNr  )re   rf   r^   r  rq   rK   r   r5  r  r;   r  rG   r  r  insertr  	enumerater   r6  )rV   r  r  iFuzzdCnvr   OTVr,   nstr   dstr  vnvxr-   jr   s   &                r0   r  ValueAxis._calcSubTicks?  s   tM**""$t,--..))C3x&! #C"wr-'B22CC		Adoo&CCAs&(#a4a&Q-CTc!fSVmCF3q6M:C!GAc(SV+Cy^^D(^^D(q6"9cjj3q6#:6r72:szz#b'#+6uSU|#$S"X.CA"3ZdAaC9o-b5ArE8! ( /
 '(jj#..
7 Ds   8I;I;c                    \        V RR4      V n        V P                  '       d   V P                  # V P                  4       V n        V P                  4        V P                  # )zKCalculate a list of tick positions on the axis.  Returns a list of numbers.rs  N)r   r^   r  r  r  s   &r0   r   ValueAxis._calcTickmarkPositionsi  sS    "4T:D$4$44224r3   c                D   V P                   f   V P                  V P                  ,
          pV\        \	        V P
                  ^,
          4      \	        V P                  4      V P                  ,          4      ,          p\        V4      V n	        R# V P                   V n	        R# )8Calculate _valueStep for the axis or get from valueStep.N)
rr  r  r  rC   r  rl  r   rk  r#   r  )rV   rawRangerawIntervals   &  r0   r  ValueAxis._calcValueStepq  sk    >>!~~6H"St/@/@/B)CU4<<EXY]YpYpEp%rrK-k:DO"nnDOr3   c                ,    \        V P                  4      # r*   )rN   r^   r  s   &r0   _allIntTicksValueAxis._allIntTicksz  s    t''((r3   c                T   \        4       pV P                  '       g   V# V P                  pVf>   V P                  ;'       g)    V P	                  4       ;'       d    R;'       g    \
        pMPV\        J d   V P	                  4       '       d   RpM-\        VR4      '       d   VP                  V P                  4       V P                  pV P                  pV P                  V P                  .pV P                  pV P                  4       V^V,
          &   V P                   pV P"                  R8w  dj   V P$                  '       d   V P                  pMV P                  pV P"                  R8X  d   V.pM+WV P&                  ,           .pV P"                  R8X  d   V^  M. p\)        V P                  4      p	V	^,
          p
\+        V P                  4       EFV  w  rW,
          pW9   d
   W},          pMW{,          pV'       g   K/  VP,                  '       g   KC  V P/                  V4      pV'       d$   V F  p\1        W,
          4      R8  g   K  R p M	  Vf   K  Ve
   W,          pMTp\3        V\        4      '       d   VV,          pMz\5        V4      '       d   V\)        V4      8  d
   W+,          pMPRpMM\        VR4      '       d*   \3        V\6        4      '       d   V! V V4      pMV! V4      pM\9        R	V,          4      hV'       d
   VV,          pWV&   VP:                  ! V!   VP=                  V4       V P>                  '       d   \3        V \@        4      '       d   V P                  pV'       gG   VPC                  4       w  ppppVV8  d+   VPE                  VPF                  V,           V,
          R
7      pW8X  dZ   VV P&                  ,           pVPC                  4       w  ppppVV8  d+   VPE                  VPF                  V,
          V,           R
7      pVPI                  V4       EKY  	  V# )Nz%.0f
calcPlacesr  r   r   r  r3  rm   zInvalid labelTextFormat %s)rG  )%r   r[  r  rm  r  _defaultLabelFormatterstrre   r  r^   rn  ro  ri   rj   r  r  rn  r~  r$  r   r;   r  r=  rg   r   r   r&   rb  
ValueErrorr5  r6  r  
XValueAxis	getBoundsclonerG  r   )rV   r   r9   postsclr  r   rn  sknticksnticks1r   tickr:  rM   skvr   txta_xr   r   r   r   a_x1s   &                       r0   r@  ValueAxis.makeTickLabels}  s<   G!!!!8!!9$$bb):):)<)G)G)a)aKaA#X$++--6qQ|$$LL))*''!!ww OO%%'AaC==& |||WWWW}}g%TDLL)==%'1BT%%&1* 0 01FAHE	qU]]]JJt$!su:d? $A!  " = H !!S))Q3qs1v:"#$C"$C :..%a55"#D)C"#A$C()E)IJJ4#:SFOOS)MM#& 000%dJ77"&''C#$161BBB#%8,1KK588c>B;NK,OE z'*DLL'8161BBB#%9*/++"T9I+*JEEE%Le 2h r3   c                6   V P                   '       g   Q R4       hVf   ^ pV P                  V P                  3V P                  ,          pV P                  pV P
                  '       d   V) pW P                  ,          pW#WP                  ,
          ,          ,           # )zfConverts a numeric value to a plotarea position.
The chart first configures the axis, then asks it to
1Axis cannot scale numbers before it is configured)r  ri   rj   r  r  rt  r   r  )rV   r  orgr  s   &&  r0   rg   ValueAxis.scale  s     T!TT=!% ww 1   B<<C/000r3   )r  r  r  r  r  r  r  r   r  r  r^   r  r  r  ri   rj   r+   )(rq   rr   rs   rt   ru   rQ  rR  r   r   r
   r   r	   r   r   r   r   r   rS  rX   r  r  r  r   r  r  r  rf   r  r  r  r  r  r  r  r  r  r@  rg   rv   rw   rx   s   @r0   rh  rh    s    . F
 9U6]*C!DKjkF
y/PQF
 #93PQF
 %Y5TU	F

 $I4RSF
 #93PQF
 #82QRF
 #=7VWF
 ''<CcdF
 %U1Qq\7\]F
 &eAal8^_F
 (6\]F
 'x6L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
* $I4cd+F
, *(9de-F
. $H3MN/F
0 d)EF1F
2 %U6%%?Frs3F
4 't2gh5F
6 +46PQ7F
8 &n;[\9F
:  5MN;F
<  5MN=F
> !6UV?F
@ ""7>fgAF
B &hz([\`aef?g/h&i  qa  bCF
D 'x
8\]abfg@h0i'j  rS  TEF
F 'x	1B:i`aefjkCl0m'n  vE  FGF
H  fVIg FGefIF
J ".7Z[KF
L U8ImDE^_MF
N  fWU6 BIdeOF
P $N9]^QF
R $N9STSF
T !-^B[ \UF
V $E&v$>EklWF
X (	8]^YF
Z #4-BC[F
\ h-YZ]F
^ h-VW_F
` "(1RSaF
b !0GHcF
d !0FGeF
f 'y7YZgF
h &i6WXiF
j *(9OPkF
l *->TUmF
n "..CJk!loF
p  ,E!AaL>hiqF
r !-U1Qq\?j ksF
t #/x=h"iuF
v $N9^_wF
x ".7Z[yF
z 'x6TU{F
| *(9[\}F
~ *->`aF
@ '};YZAF
B  ,I<}~CF
D  fU6( CDmnEF
F %^:YZGF
H %%5<abIF
J ))>EqrKF
HPVp% 
 [, ,!(_B!?03(T -)Tl1 1r3   rh  c                      a  ] tR tRt o Rt]! ]]! ]RR7      ]! ]RR7      ]! RRR7      ]! ]	! RR	R
RR4      RR7      ]! ]
RR7      R7      t^ tR tR tRR ltR tR tRtV tR# )r  i  zX/value axisr  rG  r  Nrq  r  r  r  r  r  rs  )rI  r  r  r   r  rr  c                    \         P                  ! V 3/ VB  R V P                  n        ^ V P                  n        RV P                  n        ^ V n        ^V n        RV n        RV n	        RV n
        R# r   )rh  rX   rn  r  rG  r  r  r  r   r  rr  rN  s   &,r0   rX   XValueAxis.__init__  s\    4%"% # r3   c                    V P                  ^^2^4       V P                  R.4       \        ^^d4      pVP                  V 4       V# )r	  r  r  r  r   r   r  s   & r0   r  XValueAxis.demo  s@    R%()*C	dr3   c                <   \        V4       VR8X  d   VP                  R,          V n        R# VR8X  d,   VP                  VP                  ,           R,          V n        R# VR8X  d    VP                  V4      R,          V n        R# VR8X  d   VR,          V n        R# R# )r  r  rN  r  r  r  Nr  r  s   &&&&r0   r  XValueAxis.joinToAxis  su    U8hhnDGU]xx%--/36DGW_kk#&,DGXCiDG r3   c                    V P                   pV'       dZ   V P                  ;'       g    R pVR9   d   V P                  WR7       R# VR9   d    V P                  WV P                  R7       R# R# R# r  r#  r$  s   &  r0   r'  XValueAxis._joinToAxis  sa    ]]##//xC''-++$2B2BC ,	 r3   c                   \        4       pV P                  4        V P                  '       g   V# \        V P                  V P
                  ,
          V P                  V P                  V P                  ,           V P                  ,           V P                  4      pV P                  Vn	        V P                  Vn
        V P                  Vn        VP                  V4       V# r*   r-  r.  s   &  r0   r>  XValueAxis.makeAxis   r0  r3   )rj   r   r  rr  r  r  r>  rq   rr   rs   rt   ru   rQ  rh  rR  r   r
   r   rS  r  rX   r  r  r'  r>  rv   rw   rx   s   @r0   r  r    s     Ih+--/*,#E(E7Hd$S\^">=?
H J 
 D r3   r  c                    V P                  R4      w  r\        V4      pVP                  4       p\        P	                  V4      ^,           pV\
        V^,
          ,          8:  g   Q hW43# )zThis 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.
-)splitrK   lower_monthsindex_maxDays)dmstrdstrmstrddmms   &    r0   parseDayAndMonthr)  9  sX     S!JD	TB::<D	t	q	 B"Q$8Or3   c                   0   a  ] tR tRt o RtR tR tRtV tR# )_isListOfDaysAndMonthsiG  zThis 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                r    \        V4      '       d   R pV F  p \        V4      w  rEK  	  V# R#    Rp K   ; ir   )r&   r)  )rV   r-   answerelementr'  r(  s   &&    r0   test_isListOfDaysAndMonths.testL  sC    88F#-g6FB 
 M	#"Fs   /6c                    V# r*   r+   )rV   r-   s   &&r0   	normalize _isListOfDaysAndMonths.normalizeX  s    r3   r+   N)	rq   rr   rs   rt   ru   r/  r2  rv   rw   rx   s   @r0   r+  r+  G  s     
 r3   r+  c                     a  ] tR tRt o Rt]! ]]! ]RR7      ]! ]	RR7      ]! ]	RR7      ]! ]	RR7      ]! ]
RR7      ]! RR	R7      ]! ]! ]^ ^^R
7      RR7      ]! ]! ]^ ^^R
7      RR7      ]! ]	RR7      ]! ]! ]! ]4      4      RR7      ]! ]	RR7      ]! ]! RRRR4      R4      R7      t]P$                  tR tR tR tR tR tR tR tRtV tR# )NormalDateXValueAxisi_  zAn 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 spacingrG  z$Flag for displaying months 'nicely'.z0Flag for enforced displaying of last date value.z1Flag for enforced displaying of first date value.Nz3Label format string (e.g. '{mm}/{yy}') or function.ru  zWeekday names.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 datesr  r  r  r  r  )rI  bottomAxisLabelSlack	niceMonthforceEndDateforceFirstDateforceDatesEachYearxLabelFormatdayOfWeekName	monthName	dailyFreqspecifiedTickDatesspecialTickClearr  c                    \         P                  ! V 3/ VB  R V n        ^V n        ^ V n        ^ V n        . V n        ^ V n        RV n        . ROV n	        . ROV n
        ^ V n        R;V n        V n        R# )r  z	{mm}/{yy}N)MondayTuesday	WednesdayThursdayFridaySaturdaySunday)JanuaryFebruaryMarchAprilMayJuneJulyAugust	SeptemberOctoberNovemberDecember)r  rX   r6  r7  r8  r9  r:  r>  r;  r<  r=  r@  rs  r?  rN  s   &,r0   rX   NormalDateXValueAxis.__init__{  sv    D&2& %(!"$'kV !488$1r3   c                H    V P                  4       pVP                  V4       V# )z'Convert a scalar to a NormalDate value.)_valueClassr2  )rV   r-   r   s   && r0   
_scalar2NDNormalDateXValueAxis._scalar2ND  s     	Ar3   c                   \        V\        P                  4      '       g   V P                  V4      p\        P                  \        P
                  r2 V P                  V P                  u\        n        \        n        VP                  V P                  4      W#u\        n        \        n        #   Y#u\        n        \        n        i ; i)z(Create a formatted label for some value.)
r   r   
NormalDaterX  _dayOfWeekName
_monthNamer<  r=  formatMSr;  )rV   rM   r   r  s   &&  r0   _dateFormatter#NormalDateXValueAxis._dateFormatter  s    !J1122"A((**?*?1	D?C?Q?QSWSaSa<J%z'<::d//0?@<J%z'<q<J%z'<s   AB. .Cc                  a  S P                   pS P                  pS P                  p\        V\        4      '       d   V 3R lpS P
                  '       g
   V^ ,          MV! S P
                  4      pS P                  '       g
   VR,          MV! S P                  4      pS P                  pVP                  VP                  VP                  rpVP                  VP                  VP                  rp\        V! V4      P                  R4      TY;'       g
    RV	,          W4      p\!        V^ ,          V^,          V^,          V^,          V4      pV^,          V^ ,          ,
          pV^,          V^,          ,
          p\#        YP$                  ;'       g    ^ S P&                  4      pVVS P(                  ,          ,           p. p. pS P*                  pS P,                  '       EdL   S P,                   Uu. uF  pV! V4      NK  	  ppV Uu. uF  pV! V4      NK  	  ppS P.                  '       du   VV^ ,          8X  dg   V\1        VR,          V^ ,          ,
          4      ,          V^,          V^ ,          ,
          ,          V8:  d   S P2                  '       d   RV^&   MV^ V^ S P4                  '       dx   VVR,          8X  dj   V\1        VR,          V^ ,          ,
          4      ,          VR,          VR,          ,
          ,          V8:  d"   S P2                  '       d
   RVR&   VV3# VR VR VV3# S P6                  '       Ed    \9        \;        \<        S P6                  4      4      pVP?                  4       pVP?                  4       p. p. pTpVV8:  dk   V FY  w  pp\@        PB                  ! VVV34      pVV8  g   K(  VV8:  g   K1  VPE                  V4       VPE                  V! V4      4       K[  	  V^,          pKq  S P.                  '       d   VV^ ,          8w  d   VPG                  ^ V4       VPG                  ^ V! V4      4       V\1        VR,          V^ ,          ,
          4      ,          V^,          V^ ,          ,
          ,          V8:  d   S P2                  '       d   RV^&   MV^ V^ S P4                  '       d   VVR,          8w  d   VPE                  V4       VPE                  V! V4      4       V\1        VR,          V^ ,          ,
          4      ,          VR,          VR,          ,
          ,          V8:  d"   S P2                  '       d
   RVR&   VV3# VR VR VV3# WVV3R lp\I        V4      p\J         EFG  pVV,          p V V8:  g   K  V V,          V8:  g   K&  V^,
          p!S PL                  '       dh   VPO                  4       V^8*  ;'       d    T;'       g    ^,          p"V"'       d2   S P4                  '       d   V! V!4       ^ V^ ,          n(        V!V",          p! VPO                  4       V^,          PO                  4       8H  p#T!T#8  d   T! T!4       T!T,          p!K  S P.                  '       d   T^ ,          T8w  d}   T! ^ 4       ^ T^ ,          n(        T\1        TR,          T^ ,          ,
          4      ,          T^,          T^ ,          ,
          ,          T8:  d   S P2                  '       d   RT^&   MT^ T^ S P4                  '       d   S PL                  '       do   X"'       dg   T\1        TR,          T^ ,          ,
          4      ,          TR,          TR,          ,
          ,          T8:  d   S P2                  '       d   RTR&   MTR TR  T^ ,          '       d   T^ ,          T^,          8X  d   T^ T^ TT3u # 	  \U        R4      hu upi u upi    ^ p# EL; i  \R         d     L4i ; i)	zComplex 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                 (   < SP                  SV 4      # r*   )r_  )r  rV   s   &r0   	formatter4NormalDateXValueAxis._xAxisTicker.<locals>.formatter  s    **455r3   
r  r3  c                 r    VP                  ^ W,          4       VP                  ^ V! W,          4      4       R# )r(   N)r  )r   xValsrc  ticksrn  s   &&&&&r0   addTick2NormalDateXValueAxis._xAxisTicker.<locals>.addTick  s'    LL58$MM!Ieh/0r3   z6Problem selecting NormalDate value axis tick positionsr  r4  )+rW  r   r_  r   rb  rp  rq  rn  fontNamefontSizeleading
textAnchorr  r  r   r  r   rG   r   rk  r6  rl  r?  r9  r  r@  r8  r:  r6   r7   r)  yearr   NDr5  r  r;   _NDINTMr7  monthr  r   r  )$rV   rg  VC
axisLengthrc  	firstDateendDatern  rk  rl  rm  rn  r  r  RBLxLabelWxLabelHr  Wrh  rl  r-   r   forcedPartialDates	firstYearlastYearyyyyr'  r(  theDateri  r  r   r   r  wfds$   f&                                  r0   _xAxisTicker!NormalDateXValueAxis._xAxisTicker  s    \\
''	i--6$(MMME!Hr$--7H	#'===%)b6G&,oovG'-'8'8&:J:JFLLu
Yy177=h44HZKAs1vc!fSVUCa&Q-a&Q-))$*A*ABa))))(("""$($;$;<$;qRU$;E<,12EqilEF2"""y%(':
5QVWYQZ[`ab[cQcKd@dglmngopuvwpxgx?y{|?|((( "F1Ia&)   WeBi%7ZeTViX]^_X`N`Ha=adijldmnstvnwdw<xz{<{(((!#F2J &=  b	6":&= 
 """!%c*:D<S<S&T!U "(I||~HEFD (" 2HR(mmT2rN;G)+70BW-i&89	 !3
 	 """y%(':Q	*a	) 45uU2YuQx%78858E!H;LMqP,,,$&q	!!HfQi   WeBi%7W%i01uU2YuQx%78859U2Y;NOQRR,,,%'r

 &=  ""Ivbz &= "uV 	1 J A!A,1Q3*#4aC>>>1b5;;Q+<+<"=A,,,#AJ12E!H0Q#//+uQx~~/??C fAJFA&&&58Y+>AJ)*E!H("5r58);#<<uQxa?PQSTT000(*F1I %a&)$$$A"5r58);#<<uRyr?RSUVV000)+F2J %b	6":ayyVAYq	%9!!HfQi f}$U V QRRW =2\C. " s0   0__!(__#!_#_ #_10_1c                    V P                   pV FG  p\        \        V4      4       F,  pW4,          w  rV\        WR4      '       d   K   V! V4      V3W4&   K.  	  KI  	  R# )z1Convert all XValues to a standard normalDate typeN)rW  r   r;   r   )rV   datars  r7  r   r-   rb   s   &&     r0   
_convertXVNormalDateXValueAxis._convertXV*  sN     A3q6]t!!''qE!9AD # r3   c                `   V P                   '       d   . p^ pV^ ,          pV F6  pVP                  4       pW68w  d   V'       d   VP                  V4       TpTpK8  	  VR,          pVR,          X8w  d   VP                  V4       V P                  V4      w  rxWx3# V P                  V4      w  rxWx3# )r(   r  )r>  rr  r5  r  )	rV   rg  xEOMpmpxr-   r  stepsrn  s	   &&       r0   _getStepsAndLabels'NormalDateXValueAxis._getStepsAndLabels4  s    >>>DBqBGGI54;;r?B  rBBx{DKKO --d3ME } !--e4ME}r3   c                "   V P                  V4       \        4       pV F$  pV F  pVP                  V^ ,          4       K  	  K&  	  \        V4      pVP	                  4        V P
                  pV P                  V4      w  rgV P                  V P                  rVf
   V^ ,          MV! V4      pV	f
   VR,          MV! V	4      p	WuV n	        V n
        W`n        Wpn        V P                  \        W,
          4      ,          V n        W`n        ^V n        R# )r(   Nr  )r  setr   r6   sortrW  r  rp  rq  r  r  r^   r  r   r  r  r  )
rV   r  rg  r-   dvrs  r  rn  rp  rq  s
   &&        r0   r  NormalDateXValueAxis.configureF  s    A		"Q%    U

..u5!]]DMM( ( 058bl ( 059bl)1&  & LL51D+EE r3   )r  r  r  r^   r  r  r6  r>  r<  r:  r8  r9  r=  r7  r@  r?  rs  r;  zList 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.)rq   rr   rs   rt   ru   rQ  r  rR  r   r   isListOfDaysAndMonthsr   r   r   r   r
   rS  r   rp  rW  rX   rX  r_  r  r  r  r  rv   rw   rx   s   @r0   r5  r5  _  s     j+H;kl 1WX#I4fg%i6ij)*? Gk l $D/de$Za1%MTde HQ"!KR`a 1tu)&L1I*J  RC  D'	8z{fU6( CDmn
H" --K9"	DKSZ%$ r3   r5  c                      a  ] tR tRt o Rt]! ]]! ]RR7      ]! ]RR7      ]! RRR7      ]! ]	! R4      RR7      ]! ]
R	R7      R
7      t^tR tR tRR ltR tR tRtV tR# )
YValueAxisi[  zY/value axisrB  rG  rC  Nrq  rD  rs  )rI  r  r  r   r  rr  c                    \         P                  V 4       R V P                  n        RV P                  n        ^ V P                  n        ^ V n        ^V n        RV n        RV n	        RV n
        R# rF  )rh  rX   rn  r  rG  r  r  r  r   r  rr  r  s   &r0   rX   YValueAxis.__init__n  sW    4  # r3   c                    R.pV P                  ^d^
^P4       V P                  V4       \        ^^d4      pVP                  V 4       V# )r  )r  r	  r  *   r  )rV   r  drawings   &  r0   r  YValueAxis.demo|  sE     !b"%t#s#Dr3   c                <   \        V4       VR8X  d   VP                  R,          V n        R# VR8X  d,   VP                  VP                  ,           R,          V n        R# VR8X  d    VP                  V4      R,          V n        R# VR8X  d   VR,          V n        R# R# rL  rP  rQ  s   &&&&r0   r  YValueAxis.joinToAxis  st    U6>hhnDGW_xx%--/36DGW_kk#&,DGXCiDG r3   c                    V P                   pV'       dP   V P                  pVR9   d   V P                  WR7       R# VR9   d    V P                  WV P                  R7       R# R# R# rU  r#  r$  s   &  r0   r'  YValueAxis._joinToAxis  r)  r3   c                   \        4       pV P                  4        V P                  '       g   V# \        V P                  V P
                  V P                  ,
          V P                  V P
                  V P                  ,           V P                  ,           4      pV P                  Vn	        V P                  Vn
        V P                  Vn        VP                  V4       V# r*   rZ  r.  s   &  r0   r>  YValueAxis.makeAxis  s    GDGGTWWT[[0$''477T\\;QRVR]R];]^++++#33	dr3   )ri   r   r  rr  r  r  r_  r`  r  rx   s   @r0   r  r  [  s     I02 13*,#E*T$U\^">=?
H J 
 D
 
r3   r  c                   Z   a  ] tR tRt o ^<t^<],          t^],          tR tR tR t	Rt
V tR# )TimeValueAxisi  c                Z    V P                   '       g   V P                  V n         / V n        R # r*   )rm  timeLabelTextFormatter_saved_tickInforV   argsrW   s   &*,r0   rX   TimeValueAxis.__init__  s$    ####'#>#>D !r3   c                z   V P                   Ef   V P                  V P                  ,
          pV\        \	        V P
                  ^,
          4      \	        V P                  4      V P                  ,          4      ,          pW P                  8  d   V P                  pRV n	        MQW P                  8  d   V P                  pRV n	        M-W P                  8  d   V P                  pRV n	        M	^pRV n	        W0n        V^8  d   \        W#,          4      p\        V4      V,          V n        R# V P                   V n        R# )r  Ndayshoursminutesseconds)rr  r  r  rC   r  rl  r   rk  _dc_unit_hc_mc_unitdrK   r#   r  )rV   r  r  r   s   &   r0   r  TimeValueAxis._calcValueStep  s    >>!~~6H"St/@/@/B)CU4<<EXY]YpYpEp%rrKhh&HH#
(HH$
(HH&
&
Ks!+-0-k:Q>DO"nnDOr3   c                ,   V P                   pV\        V P                  4      3pW0P                  9   d   V P                  V,          pEM6\	        V4      pV P                   Uu. uF  qfV,          NK  	  ppV P
                  ^ ,          p\        V4      '       d   WX3R lpMV Uu. uF  pRV,          NK  	  p	p\        R V	 4       4      p
V^8X  d   VRV
,          3R lpMW P                  8X  d   ^M^<pV Uu. uF  qf\        V4      ,
          V,          NK  	  pp\        V4      '       d7   W P                  8X  d   RMW P                  8X  d   RMRpW[R	W3,          3R
 lpMVRW3,          3R lpW@P                  V&   V! V4      # u upi u upi u upi )r(   c                 $    R W,          V3,          # )z%.0f%sr+   )r-   ufr   s   &&&r0   r1   6TimeValueAxis.timeLabelTextFormatter.<locals>.<lambda>  s    HQx,?r3   z%.10fc              3      "   T F<  p\        VP                  R 4      4      VP                  R4      ,
          ^,
          x  K>  	  R# 5i)0.N)r;   rstripr"  ).0rM   s   & r0   	<genexpr>7TimeValueAxis.timeLabelTextFormatter.<locals>.<genexpr>  s2     L1C.qwws|;A==s   AAz%%.%dfsc                      W V,          ,          # r*   r+   r-   r  fmts   &&&r0   r1   r    s
    sd|r3   hr  r   z%%d%s%%d%%sc           	          V\        W,          4      \        W,          \        W,          4      ,
          V,          4      3,          # r*   rJ   )r-   r  fmr  s   &&&&r0   r1   r    s8    PSWZ[\[_W`adfgfjmpqrqumvfvxzeza{V|P|r3   z%%.%df%sc                      W V,          ,          # r*   r+   r  s   &&&r0   r1   r    s    QStr3   )r  tupler^   r  r  r  rN   rG   r  rK   r  )rV   valr  r   r  r  rM   r   r   stvstvlr  fvs1s   &&            r0   r  $TimeValueAxis.timeLabelTextFormatter  s^   KKuT%%&'$$$&&q)CqB $ 0 01 01B$$ 0B1

1Ar{{#%?,./Bqw{{B/LLLa4&(Y-=KC  !(({B3562as1v:r//2B6r{{$%xxKSQ[cc*,8N|*,th1FT&)  #3x) 2
 0 7s   "F$F8!F)r  r  r  r  rm  N)rq   rr   rs   rt   r  r  r  rX   r  r  rv   rw   rx   s   @r0   r  r    s0     
C
S&C
S&C"
-2 r3   r  c                   &   a  ] tR tRt o R tRtV tR# )XTimeValueAxisi  c                n    \         P                  ! V .VO5/ VB  \        P                  ! V .VO5/ VB  R # r*   )r  rX   r  r  s   &*,r0   rX   XTimeValueAxis.__init__  s2    D.$..t1T1D1r3   r+   Nrq   rr   rs   rt   rX   rv   rw   rx   s   @r0   r  r    s     2 2r3   r  c                      a  ] tR tRt o Rt]! ]]! ]RR7      ]! ]	RR7      ]! ]	RR7      ]! ]
! ]]34      RR7      ]! ]	RR7      R	7      tR
 tR tRtV tR# )AdjYValueAxisi  zA 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.rG  r  r  z8Skip/Keep lowest tick label when true/false.
Or skiplistzadd this to the labels)rI  leftAxisPercentleftAxisOrigShiftIPCleftAxisOrigShiftMinleftAxisSkipLL0labelVOffsetc                    \         P                  ! V 3/ VB  ^V n        ^V n        RV n        ^V n        ^ ;V n        V n        RV n        R# )r  g333333?N)	r  rX   r  r  r  r  r  r  rs  rN  s   &,r0   rX   AdjYValueAxis.__init__  sL    D&2& $(!$&!344t0r3   c           
        ^ RI HpHp V P                  V P                  rCV P
                  p\        \        V3R l. RO4      4      pV'       g   V.pV P                  V P                  rV'       d   WC,
          V8  d   V! W4WgR7      R,          w  rW,
          V8  d{   W,           R,          p\        WR,          ,
          V4      p	\        WR,          ,           V4      p
V^d8  d   V	^d8  d   V
^d,           V	,
          p
^dp	MV^ 8  d   V	^ 8  d   W,
          p
^ p	WuV n        V n        V! V P                  V P                  ^W`P                  WpP                  R7      w  rV P                  pV'       Ed   V^,          V^ ,          ,
          p\        V4      '       g   W,          ;ppMW^ ,          ,          pW^,          ,          p\!        V RV^ ,          4      p\!        V RVR,          4      pVV^ ,          ,
          V8  d   V P                  V,
          V n        VR,          V,
          V8  d   V P                  V,           V n        V! V P                  V P                  ^W`P                  WpP                  R7      w  rV^ ,          V n        VR,          V n        Wn        V P$                  f   Wn        MV P$                  V n        \)        V P                  ^d,
          4      R
8  d   V P+                  4        V P                  V P                  pp\        V P,                  V P.                  ,          VV,
          V P0                  ,          V P2                  ,          4      pV P                  V,
          V n        V P4                  '       d<   \        V P4                  4      '       d   V P4                   F	  p RVV&   K  	  RV^ &   R	# R	#   \6         d     K$  i ; i)z$Adjusts the value range of the axis.)find_good_gridrh  c                 
    W8*  # r*   r+   )r-   r  s   &&r0   r1   ,AdjYValueAxis._rangeAdjust.<locals>.<lambda>
  s    adr3   )r  grid:Nr  NrL  )r  r  percentr  r  r  r  Nr  r3  )r              	   r  )reportlab.graphics.charts.utilsr  rh  r  r  rl  r6   r:   rr  r  rC   rG   r  r  rt  r&   r   r^   rm  r  r   r  r  r  r  r   r  r   )rV   r  rh  y_miny_maxr  r  rr  r  r   r  ymr,   r   r  r  r  _nri   vMaxvMinr-   s   &                     r0   r  AdjYValueAxis._rangeAdjust  s    	J~~t~~u1*=9:qc!#'>>43E3E=U]]:#E1DRHFBw&eS[#--e4#--e4#:"S&cBBBAX"Q$BB-/*DNDNT^^T^^1K_K_en  ~O  ~O  P!!3A$qt)B::& RAYAYl1Q40Bl1R51BAaDy2~0Ct~uRx"}t~~/BdnqAOcOcir  BS  BS  TDA12'$%!$($8$8D!t~~c!"4'!$DD--doo=$Y 9 99$,,FHA!^^a/DNT))**--A!! .
 AaD  
 & s   2OOO)r  r^   r  r  r  r  r  r  r  r  rs  N)rq   rr   rs   rt   ru   rQ  r  rR  r   r   r   r   rS  rX   r  rv   rw   rx   s   @r0   r  r    so     
 j&y7de+H;_`+H;UV&x?0K'L  TO  P#H3KL
H= =r3   r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )LogValueAxisiC  c                    V P                   \        \        V P                  4      \        V P                  4      ,
          4      ,          V n        V P
                  # r  )r   r  
math_log10r  r  r  r  s   &r0   r  LogValueAxis._calcScaleFactorE  sD    
 !LL5t~~&DNN)CC,E E   r3   c                X   V P                   pV P                  p\        WP                  ^ V P                  R7      p\        WP                  ^ V P                  R7      pVf   TpVf   TpW#8  d)   \        RV P                  P                  V3,          4      hV^ 8:  d(   \        V P                  P                  : RV: R24      hV P                  pV'       d   \        V4      p\        V4      p\        V4      '       g   Wf3pV^ ,          ;'       g    ^ p	V^,          ;'       g    ^ p
V P                  W,           ,
          pW,
          \        V4      ,          pWyV,          ,          pWV,          ,          p\        V^
V,          4      p\!        V^
V,          4      pW n        W0n        R# )r(   )r>   Nz7%s: valueMin=%r should not be greater than valueMax=%r!z: valueMin=z! negative values are not allowed!)rp  rq  rE   r  r>   rH   r  r  _LogValueAxis__name__valueMinrq   rw  r  r&   r   r  rC   rG   r  r  )rV   r  rp  rq  aMinaMaxr  lMinlMaxa0a1r   r  s   &&           r0   r  LogValueAxis._setRangeO  sg   ====
??1tG]G]^
??1tG]G]^XXVZ^ZhZhZyZy  |D  ZE  E  F  FQ;SWSaSaSjSjkstuu""d#Dd#D::SXsQ1BQ1B(A)U1X%BrEMDrEMD8BH-H8BH-H!!r3   c                   \        V P                  4      ;r\        V P                  4      ;r4V P                  pV'       dG   VR9   d   \	        V4      pWc8  d
   V^,           MTpVR9   d   \	        V4      pWa8  d
   V^,
          MTp. P
                  p\	        V4      pW8  d
   V^,          p\	        V4      V,
          ^,           p	\        \	        WP                  ,          4      ^4      pWi,          V P                  8  d
   V^,          pW`n         W8  d   MW8  d   V! ^
V,          4       W,          pK'  W8w  d   ^
V,          V n        W48w  d   ^
V,          V n        VP                  # )r  r  r  )
r  r  r  ry  rK   r5  rG   rl  	_powerIncr6  )
rV   rp  r  rq  r  r  r   r,   r   r  s
   &         r0   r  LogValueAxis._calcTickPositionsj  s#   $T^^44$T^^44__''M%&ZAEQ%%M%&ZAEQII];aMB"A'''(+3t   !q&!{E|Qr2vYGB>BL4>>BL4>zzr3   c                   \        V R 4      '       g   V P                  4        V P                  p\        V R4      '       Eg   . P                  p\	        V P
                  4      p\	        V P                  4      ^,           p\        V4      pV P                  pV^8X  d   ^
\        V P                  4      ,          p^pV P                  ^
8X  d   ^pWT8  di   \        WP                  4       FE  p	Wy,          ^
V,          ,          p
WP
                  8  g   K+  WP                  8  g   K=  V! V
4       KG  	  WV,          pKn  M\        V P                  ^,           V^,
          4      pV'       d"   Wk,          ^ 8X  d
   Wk,          pMV^,          pK)  ^p\        V4      p ^
V,          p
WP                  8  d   MW9  d	   V! V
4       WV,          pK3  VP                  V n        V P                  V n        V# )r^   r  )re   rf   r^   r5  r  r  r  roundr  r  r  r   rC   r6  r  )rV   r  r,   rp  rq  r   r   facr   r  rM   ngs   &           r0   r  LogValueAxis._calcSubTicks  s   tM**""$t,--		A!$..1H!$..1!3HxBA!t511??b(!%m"59E2r6N~~-!nn2DaD : GB $ *1Q3/{!GBA8_BANN*E|!GB"#**D..
r3   )r  r  r  r^   r  r  N)
rq   rr   rs   rt   r  r  r  r  rv   rw   rx   s   @r0   r  r  C  s     !"68& &r3   r  c                   &   a  ] tR tRt o R tRtV tR# )LogAxisTickLabelleri  c                    \        V4      p\        V^ 8  d
   VR,
          MVR,           4      pV^ 8X  d   R# V^8X  d   R# RV,          # )r(   MbP?110z10<sup>%s</sup>)r  rK   )rV   rk   r  r8   s   &&& r0   rm   LogAxisTickLabeller.__call__  sC    u1Q3%AeG,a4a4 1$$r3   r+   N)rq   rr   rs   rt   rm   rv   rw   rx   s   @r0   r  r    s     % %r3   r  c                   *   a  ] tR tRt o RtR tRtV tR# )LogAxisTickLabellerSi  zVsimple log axis labeller tries to use integers
and short forms else exponential formatc                &   \        V4      p\        V^ 8  d
   VR,
          MVR,           4      pV^ 8X  d   R# V^ 8  d   RVR,          ,           MR^V,           ) R,          ,           R,           pRV,          p\        V4      \        V4      8  d   V# T# )r(   r  r	  r  z0.z%.0e)r  rK   r;   )rV   rk   r  r8   pr   ses   &&&    r0   rm   LogAxisTickLabellerS.__call__  sz    u1Q3%AeG,a41C#I$!A#s
"3C"7e^WSV^r**r3   r+   Nre  rx   s   @r0   r  r    s     /+ +r3   r  c                   &   a  ] tR tRt o R tRtV tR# )LogAxisLabellingSetupi  c                n   \         e   \        \        4      V n        V P                  ^8X  d5   RV P                  n        RV P                  n        ^ V P                  n        M3RV P                  n        ^ V P                  n        RV P                  n        \        4       V n	        R # \        4       V n	        R # )Nr8   r  r  )r"   r   r!   rn  r  r  rG  r  r  rm  r  r  s   &r0   rX   LogAxisLabellingSetup.__init__  sz    )1&9DK!(+%!#!"(+%!"!##6#8D #7#9D r3   )rm  rn  Nr  rx   s   @r0   r  r    s     : :r3   r  c                   >   a  ] tR tRt o ]! ]R7      tR tR tRt	V t
R# )LogXValueAxisi  rI  c                Z    \         P                  V 4       \        P                  V 4       R # r*   )r  rX   r  r  s   &r0   rX   LogXValueAxis.__init__      D!&&t,r3   c                N   RpV P                   '       g   Q V4       hVf   ^ pVR8X  d8   V P                  V P                  \        V P                  4      ,          ,
          # V P                  V P                  \        V4      \        V P                  4      ,
          ,          ,           # zConverts 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  r  )r  ri   r  r  r  rV   r  msgs   && r0   rg   LogXValueAxis.scale       B$$=EB;77T..DNN1KKKKww**j.?*T^^B\.\]]]r3   r+   N)rq   rr   rs   rt   rQ  r  rS  rX   rg   rv   rw   rx   s   @r0   r  r    s      J'H-^ ^r3   r  c                   >   a  ] tR tRt o ]! ]R7      tR tR tRt	V t
R# )LogYValueAxisi  r  c                Z    \         P                  V 4       \        P                  V 4       R # r*   )r  rX   r  r  s   &r0   rX   LogYValueAxis.__init__  r  r3   c                N   RpV P                   '       g   Q V4       hVf   ^ pVR8X  d8   V P                  V P                  \        V P                  4      ,          ,
          # V P                  V P                  \        V4      \        V P                  4      ,
          ,          ,           # r  )r  rj   r  r  r  r  s   && r0   rg   LogYValueAxis.scale  r!  r3   r+   N)rq   rr   rs   rt   rQ  r  rS  rX   rg   rv   rw   rx   s   @r0   r#  r#    s      J'H-^ ^r3   r#  rC  )janfebmaraprmayjunjulaugsepoctnovdec)      r4  r  r4  r  r4  r4  r  r4  r  r4  )r   r     r        <   x         i,  ih  i  i  i  iX  i  iH  i  i8  i  i`	  )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&   r@   rE   rH   rN   rP   r{   r   r   r   rF  rU  r  r  r  r  r  rA  rb  r  rh  r  r!  r#  r)  r+  r  rq  r5  r  r  r  r  r  r  r  r  r  r#  r+   r3   r0   <module>rI     s   	< % G G G G G $ $ } } } I ] ] ; 7 & %
Gab" "<G GRC CJ7 7$jV jXh B66 B6Hee; ;zg ,oGL oboGL ob0 0 / R	1 R	1hI Ij T;Y * /0 
Yz: zxI IV> >D2]: 2
TJ Tli9 iX%, %	+< 	+: : ^L!6z ^0^L!6z ^r3   