
    h                     d   d Z dZddlmZ ddl ddl ddlmZmZ ddl	m
Z
mZmZmZmZmZ ddlmZmZmZ ddlmZ dd	lmZmZmZmZ ddl dd
lmZmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)  G d de      Z* G d de+      Z, G d de      Z- G d d      Z. G d d      Z/ G d de/e"      Z0 G d de/e      Z1ddl2m3Z3  G d d e3      Z4 G d! d"e4      Z5g d#g d$gZ6 G d% d&e4      Z7 G d' d(e7      Z8 G d) d*e4      Z9 G d+ d,e9      Z:d- Z; G d. d/e4      Z<d0 Z=d1 Z>d2 Z?d3 Z@d4 ZAd5 ZBy6)7z3.3.0z9This module defines a very preliminary Line Plot example.    colors)*)flattenisStr)DrawingGroupRectPolyLinePolygon_SetKeyWordArgs)TypedPropertyCollection
PropHolder
tpcGetItem)Label)
XValueAxis
YValueAxisAdjYValueAxisNormalDateXValueAxis)uSymbol2Symbol
makeMarker)Grid
DoubleGridShadedPolygon)stringWidthgetFont)PlotArea   )FillPairedDatac                      e Zd Z e eed       eed       eed       eed       eddd	       edd
d	       eddd	       eed       e e	 e
ddd            dd	       eedd	       e e
ddddd      dd	            Zy)LinePlotPropertieszWidth of a line.desczColor of a line.zDash array of a line.z,Color of infill defaults to the strokeColor.NzWidget placed at data points.r   r#   advancedUsagezShader Class.zFiller Class.zName of the line.line
joinedLinebarzWhat kind of plot this line isz2Percentage of available width to be used for a barr      TFzIf true flood fill to x axis)strokeWidthstrokeColorstrokeDashArray	fillColorsymbolshaderfillername	lineStylebarWidthinFill)__name__
__module____qualname__AttrMapAttrMapValueisNumberisColorOrNoneisListOfNumbersOrNoneisStringOrNoneNoneOrOneOfisNumberOrNone_attrMap     S/home/dcms/DCMS/lib/python3.12/site-packages/reportlab/graphics/charts/lineplots.pyr!   r!      s    "82DE"=7IJ&'<CZ[ 5cdd)HWXYdqIdqIN1DE f\%(H!IPp  @A  B4hwxyeAa$u5<Zijk
HrC   r!   c                       e Zd ZddZy)InFillValueNc                 @    t         j                  | |      }||_        |S N)int__new__yValue)clsvrK   selfs       rD   rJ   zInFillValue.__new__(   s    {{3q!rC   rH   )r5   r6   r7   rJ   rB   rC   rD   rF   rF   '   s    rC   rF   c                   Z    e Zd Z ee eed       e eedd      d            Z	d Z
y)	ShaderzIf true shade to x axisr"   r)   )lohiz(AxisColor, LineColor))BASEverticalr   c                     d d g}t        | d|      xs |}|d   st        |dt        j                        |d<   |d   s||d<   y y )Nr   r   r-   r   )getattrr   white)rN   lpgrowNorowColorrowcs          rD   shadezShader.shade3   sK    $KD!$)tGB{6<<@QqTtHQqTtrC   N)r5   r6   r7   r8   r   r9   	isBoolean
SequenceOfr;   rA   r^   rB   rC   rD   rP   rP   -   s2    H	0IJj!qAH`a
H
%rC   rP   c                       e Zd Zd Zy)NoFillerc                      y rH   rB   rN   rX   rY   rZ   r[   pointss         rD   fillzNoFiller.fill:   s    rC   N)r5   r6   r7   rf   rB   rC   rD   rb   rb   9   s    rC   rb   c                   b    e Zd ZdZ e eed       eed       eed            Zd Z	d Z
y	)
Fillerz#mixin providing simple polygon fillzfiller interior colorr"   zfiller edge colorzfiller edge widthr-   r+   r*   c                     || _         y rH   )__dict__)rN   kws     rD   __init__zFiller.__init__D   s	    rC   c                     |j                  t        |t        | d|      t        | d|      t        | dd                   y )Nr-   r+   r*   皙?ri   )addr   rV   rd   s         rD   rf   zFiller.fillG   s;    	gfd;x8]8<]379 	:rC   N)r5   r6   r7   __doc__r8   r9   r;   r@   rA   rm   rf   rB   rC   rD   rh   rh   =   s:    - 5LM"=7JK">8KL
H
:rC   rh   c                       e Zd Zy)ShadedPolyFillerNr5   r6   r7   rB   rC   rD   rs   rs   M       rC   rs   c                       e Zd Zy)
PolyFillerNrt   rB   rC   rD   rw   rw   P   ru   rC   rw   )AbstractLineChartc                      e Zd ZdZ ee eedd       eedd       edd       edd	       edd
       ee	d       ee	d       edd       edd       edd       edd       eddd       eedd       eedd            Z
d Zed        Zej                  d        Zd Zd Zd Zd Zd Zd Zej,                  ddfdZy) LinePlotzLine plot with multiple lines.

    Both x- and y-axis are value axis (so there are no seperate
    X and Y versions of this class).
    zIf true reverse plot order.r   r$   z,Distance between a data point and its label.Nz(Handle to the list of data point labels.r"   z9Formatting string or function used for data point labels.zHexplicit array of line label values, must match size of data if present.z.Color used for background border of plot area.0Color used for background interior of plot area.zHandle of the lines.zHandle of the x axis.zHandle of the y axis.z2Data to be plotted, list of (lists of) x/y tuples.z<list of callables, will be called with self, xscale, yscale.z If true use separate line group.z#If true use draw grids before axes.)rS   reversePlotOrderlineLabelNudge
lineLabelslineLabelFormatlineLabelArrayr+   r-   lines
xValueAxis
yValueAxisdataannotations
behindAxes	gridFirstc                    t        j                  |        d| _        t               | _        t               | _        ddg| _        t        t              | _
        d| j                  _        d| _        t        j                  | j                  d   _        t        j                   | j                  d   _        t        t"              | _        d | _        d | _        d| _        d | _        g | _        d| _        d| _        y )Nr   )r   r   )r)   r)   )      @r   )   r   )      )r   r)   r)   r   r   r)   )r   r   r      r   
   )r   rm   r|   r   r   r   r   r   r   r!   r   r*   joinedLinesr   redr+   bluer   r~   r   r   r}   _inFillr   r   r   rN   s    rD   rm   zLinePlot.__init__l   s    $ !$,$, 21	
 --?@
!"

$*JJ

1!$*KK

1!1%8#" !
 rC   c                 4    | j                   j                  dk(  S )Nr'   r   r2   r   s    rD   r   zLinePlot.joinedLines   s    zz##\11rC   c                 N    |rd| j                   _        y d| j                   _        y )Nr'   r&   r   )rN   rM   s     rD   r   zLinePlot.joinedLines   s    /0|

f

rC   c                    t        dd      }ddg}t               }d|_        d|_        d|_        d|_        ||_        d|_        d	|_        t        j                  |_        t        j                  |j                  d
   _        t        d      |j                  d
   _        t        j                   |j                  d   _        t        d      |j                  d   _        d
|j"                  _        d|j"                  _        d|j"                  _        d
|j*                  _        d|j*                  _        d|j*                  _        |j-                  |       |S )z Shows basic use of a line chart.     r   r   r   r   )g      @r   r   2   }   ,  r   %2.0fr   FilledCircleFilledDiamondr      )r   rz   xyheightwidthr   r   r   r   blackr+   r   r   r   r.   r   r   valueMinvalueMax	valueStepr   rp   )rN   drawingr   rX   s       rD   demozLinePlot.demo   s    #s# 23
 Z	$"(**'7"(++'8!"!""#!"!""#BrC   c                    t        | j                        | _        t        t	        t        t         | j                                    | _        t               }g j                  }| j                  j                  }| j                  j                  }| j                  }t        |      }t        |      D ]  \  }}t        |t              rR|j                  }	d|	cxk  r|k  r*n n'|	|k(  rt!        d|z        |j#                  ||	f       nt!        d|d|	      g j                  }
t        |      D ]H  \  }}|d   } |
t%        |      r |t'        t)        |                  n ||       ||d         f       J  ||
j*                          |j*                  }|D ]  \  }}	t        ||   |	      ||<    t        |      | _        || _        y)zWorks out where they go.

        Sets an attribute _positions which is a list of
        lists of (x, y) matching the data.
        r   z)data row %r may not be paired with itselfz	data row z! is paired with invalid data row r   N)lenr   _seriesCountmaxlistmap
_rowLengthsetappendr   scaler   	enumerate
isinstancer   other
ValueErrorrp   r   mktimemkTimeTuple__self___pairInFills
_positions)rN   pairsPxscaleyscaler   nrZ   r\   r   r&   colNodatumxvs                 rD   calcPositionszLinePlot.calcPositions   s     		Nd3s499#567II&&&&yyI#D/ 	JE3#~.		e:A:e|()TW\)\]]IIuUm,$Y^`e%fgg99D )# u1X7<RyF6+b/23fRj58$ dmm%	& JJ " 	6LE5%ahu5AeH	6JrC   c                    | j                   }| j                  |   |   d   }|d}njt        |t              r|dk(  r| j                  |   |   }nB||z  }n<t        |d      r"t        |d      s	 ||      }n || ||||      }nt        d|z        |ru| j                  ||f   }|j                  sy|dkD  r |j                  ||| j                  z          n|j                  ||| j                  z
         |j                  |       |S d}|S )z*Draw a label for a given item in the list.r   Nvalues__call____labelFmtEX__z6Unknown formatter type %s, expected string or functionr   )r   r   r   strr   hasattrr   r~   visible	setOriginr}   setText)	rN   rZ   r   r   r   labelFmt
labelValue	labelTextlabels	            rD   _innerDrawLabelzLinePlot._innerDrawLabel   s    ''YYu%e,Q/
I%8# //6u=	$z1	Xj)8$45$Z0	$T%a:	UW__``OOUEN3E==&1u1t':':#:;1t':':#:;MM)$  ErC   c                 J    |j                  | j                  ||||             y)zLDraw a label for a given item in the list.
        G must have an add methodN)rp   r   )rN   GrZ   r   r   r   s         rD   	drawLabelzLinePlot.drawLabel  s!     	
d""5q34rC   c                 4   t               }| j                  }| j                  }t        | dd       }|r,t	        |j
                  |j
                        }|j                  }| j                  }| j                  }t        | dd       }	| j                  }
t        |
      }|	sA| j                  s5t        t        |            D cg c]  }t        |
||z     dd      r| c}rUt        |	dd       }||j                  }n|j                  |      }|j                  }||j                   z   }t        | d|      }d }t        | d|      }t        t        |            }| j"                  rt%        |      }|D ]  }||   }||z  }|
|   }t        |dd       }t        |d	d       }t        |d
|      }t        |d|	      }t        |dd       }t        |dd       }t'        |d	      r|j(                  }nt'        |
d	      r|
j(                  }nd }|dk(  r\|t+        t-        t        |            dz
  }|dkD  r| j.                  |z  dz
  n| j.                  }t        |dt1        d            }| j                  }|j                  d      } t+        |j                  |       }!t	        |j                  |j                   z   |       }"| j                  j                  }#|#| j                  j                   z   }$t3        |t0              r	||dz  z  }n|dz  }|D ]\  \  }}%|}&|% k  r"n!}'||&dz  z  }|#k  r|&|#|z
  z  }&|#}n||&z   $kD  r|&|$|z
  z  }&|j5                  t7        ||'|&|%|'z
  |||             ^ n|dk(  rt9        |      }(|st3        |t:              rt        |dd       })t3        |t:              r%|(t9        t%        ||j<                                 z   }*ng|(z   |gz   }*|)r|)j?                  | |||*       n)j5                  tA        |*|||k(  r|nd |xs d             |r
|dk(  s||k7  r2tC        |(|dd      }+|r||+_        |r||+_"        |j5                  |+       t'        |d      r|jF                  },nt'        |
d      r|
jF                  },nd },|,r|r| jH                  |   }-tK        |      D ]  \  }.}/||.f|
v rt        |
||.f   d|,      }0n|,}0|0|,u r|,}1|}2n|0}1t        |1d
|      }2tM        tO        |1|.      |/d   |/d   |2      }1|1sZ|r-|.   d   z  dz  z  |1_(        |j5                  |1        n|r| jH                  |   }-tK        |      D ]r  \  }.}/t        |
||.f   dd       }0|0st        |0d
t        |0d|            }2tM        |0|/d   |/d   |2      }1|1sJ|r-|.   d   z  dz  z  |1_(        |j5                  |1       t tK        |      D ]  \  }3}4|4\  }5}6| jS                  |||3|5|6       ! t        |dd       }7|7s|7jU                  | ||||        |S c c}w )N_bubblePlotr   r4   FrK   _inFillG_lineGr+   r*   r-   r,   r2   r(   r   r   r3   r   g{Gzt?      ?r)   )r*   r+   r-   r'   r0   ro   ri   )r+   strokeLineCapstrokeLineJoinr.   r/   )+r	   r   r   rV   min_bubbleRadius
_bubbleMaxr   r   r   r   r   range_yr   _x_lengthr|   reversedr   r*   r   r   r   
Percentager   rp   r
   r   r   r   rf   r   r   r,   r.   r   r   r   r   sizer   r^   )8rN   rY   yAxA
bubblePlotbubbleR	bubbleMaxr   r   r   r   
styleCountrZ   inFillYinFillX0inFillX1inFillGbwlGRr\   
styleRowNorowStyler+   r*   r-   r4   dashr2   r   r   r3   y0byposbynegxminxmaxr   w_y0re   r0   fpointsr&   uSymboldrowjxyjuSymbolr.   symColorr   r   x1y1r/   s8                                                           rD   	makeLineszLinePlot.makeLines  sZ   G____T-5
"**2+;+;<GI''OO$y.

Z
t(($)#a&M L5"5z)9#:8EJ  L ght4G%%((7+uuH"**,Hd:a0GT(1%#a&M  hqk! l	BEE(C+JZ(H!(=>K!(=>K+{CIXhw7F8%6=DT:Ix/ ,,.)) %:CAJ!+A/0s$**Q,*

B&x
:b>JHABRLEQYYr2E??--D$//"9"99D!(:6hun,%c\ 
sDAqA#$R4%UC1HAvTAX 1tTAXEE$qQquQ\gpqr
s L( ZN;$Xx>F!#n5"(78AciiL3I+J"J#+G"4v"='@R"RDyIGGicnpycyT_  @D  QV  Q]  Z]  %^  _k9.D#F{QRbcdD+0(/3,FF4Lx*"//),,dii&6t%cN &DAb"1~.#*5A+>x#P#*7*!(#.!)#*6+k#J+Jva,@Ar!uXVF%*1471:i3G#2M*MFKf&" dii&6t%cN &DAb&uZ\':8DIH#X&xGH][f<ghH+HRU2a5JF%*1471:i3G#2M*MFKf&  )~ 8eBq%B78 Xx6Fv||D5SAYl	B\ }Ls   >Xc                 	   | j                   }| j                  }t        | dd       rdx|_        |_        |j	                  | j
                  | j                  | j                         |r||_        |r||_        |j                  | j                         |j                  d      }|| j                  | j                  z   kD  s|| j                  k  r| j                  }n|}|j	                  | j
                  || j                         |j                  | j                         | j                          t               }|j                  | j!                                | j"                  s| j$                  r||j'                          | j"                  r*t               | _        |j                  | j(                         | j$                  r*t               | _        |j                  | j*                         |j'                          |j'                          |j,                  xr |j.                  gxs g }|j,                  xr |j0                  gxs g }t        |dd      }|d k7  rK|dv r(|j3                  |j0                  |j4                  z          |dv r|j3                  |j0                         t        |dd      }|d k7  rK|dv r(|j3                  |j.                  |j4                  z          |dv r|j3                  |j.                         | j6                  r>|j9                  || |j:                  |       |j9                  || |j:                  |       |j                  |j=                                |j                  |j=                                | j6                  s\t        |d	d
      }	t        |d	d
      }
|	s|j9                  || |j:                  |       |
s|j9                  || |j:                  |       t        | dg       }|D ]=  }t        |dd       s|j                   || |j                  |j                               ? |j                  | j?                                | j6                  sB	r|j9                  || |j:                  |       
r|j9                  || |j:                  |       |D ]=  }t        |dd       r|j                   || |j                  |j                               ? |S )Nr   r   r   skipGridnone)bothtop)r  bottom)parentdimexcludedrawGridLastFr   beforeLines) r   r   rV   r   setPositionr   r   r   joinAxis	configurer   r   r   r   r	   rp   makeBackgroundr   r   _joinToAxisr   r   visibleAxisr   r   r   r   r   makeGridgetGridDimsdrawr  )rN   r   r   xAxisCrossesAtr   rY   xAexyAexr  xAdglyAdglr   as                rD   r#  zLinePlot.draw  s   ____4d+.//BNR^
tvvtvvt{{3Rr{Rr{
TYY !dfft{{228OAA
tvvq$**-
TYYG	d!!#$<<4??NN|| %dmm$#gdkk"

~~)255'/R~~)255'/R2j0T>>)BEE"**,-,,BEE"2j0T>>)BEE"**,-,,BEE">>KK"..KFKK"..KF	bggi	bggi~~B~e4EB~e4E"++att+T"++att+Td=4 	1Aqt,aRXXbhh/0	1 	
dnn~~bkk!4BNN4kPbkk!4BNN4kP 	1A1]40aRXXbhh/0	1 rC   Tc                    
 ddl m
m t        | dg       D cg c]  }t        |dd       |k7  s| }}
fd}	||	_        |j                  |	       || _        y c c}w )Nr   )r	   Liner   r1   c           
      ^    |      } |      }        }|j                   }|j                   	|j                  ||j                  |j                  z   |
             |j                   }|j                   	||j                  ||j                  |j                  z   
             |S )N)r+   r*   )r   rp   r   r   r   )rN   xScaleyScaler   r   rY   r   r   r	   r+  r+   r*   r   yvs           rD   
annotationz)LinePlot.addCrossHair.<locals>.annotation  s    r
Ar
AABEE$ruuQruuRZZ/kVabcBEE$qqrzz!1kVabcHrC   )reportlab.graphics.shapesr	   r+  rV   r  r   r   )rN   r1   r   r/  r+   r*   r  r)  r   r0  r	   r+  s     ````    @@rD   addCrossHairzLinePlot.addCrossHair  sd    9")$}R"@aQGAfUYDZ\`D`qaa	 	 "-
:&& bs
   A$A$)r5   r6   r7   rq   r8   r   r9   r_   r:   r;   rA   rm   propertyr   setterr   r   r   r   r  r#  r   r   r2  rB   rC   rD   rz   rz   T   s*   
 H'	8Udef%h5crst!$-WX&t2mn%d1{|"=7gh 5ghT(>?!$-DE!$-DED'[\"4.l{|}!)2Tcde 1Vefg
H$%N 2 2 = =$N)V D5
N`CJ 28!X\ 'rC   rz   c            
           e Zd Z ee eed       eed       eed       eed            ZdZdZ	dZ
d	Zd
 Zd Zd Zd Zy)
LinePlot3Dzdx/dzr"   zdy/dzzdepth of an individual serieszz gap around series)rS   theta_xtheta_yzDepthzSpacer   r   r   c                 &   t         j                  |        | j                  }| j                  }| j                  }| j
                  j                  dk(  r||z  |dz   |z  z   }n|d|z  z   }| j                  |z  | _        | j                  |z  | _
        y )Nparallel_3dr   r)   )rz   r   r   r:  r9  r   styler7  _3d_dxr8  _3d_dy)rN   nSeriesr:  r9  	_3d_depths        rD   r   zLinePlot3D.calcPositions  s    t$##??  -/	6'99I6)Ill9,ll9,rC   c                     | j                   }| j                  j                  dk(  r|| j                  |z   z  |z   }|S |}|S )Nr<  )r:  r   r=  r9  )rN   rZ   r:  z0s       rD   _calc_z0zLinePlot3D._calc_z0  sH    ??  -/F*+F2B 	 B	rC   c                 J    ||| j                   z  z   ||| j                  z  z   fS rH   )r7  r8  )rN   r   r   zs       rD   _zadjustzLinePlot3D._zadjust  s'    4<<1T\\>!111rC   c                 0   t        | dd       }|rJ d       | j                  }| j                  }t        t	        t        |                  }| j                  r|j                          t        | dd       }|rJ d       | j                  }| j                  }| j                  }| j                  }	ddlm}
  |
       }ddlm}m} | j"                  j$                  dk7  r|t        | d	d
      }t        | dd       r_ddlm} t        t)        ||            } |||      }d }|D ]0  \  }}}}||k7  r|}d}nd
z  }||   j+                  ||z   ||f       2 d }n|}nd }|}t        | j,                        }|D ]  }||   }t        |      }| j,                  ||z     }|j.                  }t        |dd       }| j1                  |      }||z   } t3        |d      r|j4                  }!n/t3        | j,                  d      r| j,                  j4                  }!nd }!| j6                  rM|rK||   }"|"d   \  }#}$t	        d
t        |"            D ]&  }%|"|%   \  }&}' |||#|&|$|'|| ||	|d |d d d d       |&|'}$}#( t3        |d      r|j8                  }(n/t3        | j,                  d      r| j,                  j8                  }(nd }(|(rJ|D ]E  })|%   \  }&}' ||&|'|      \  }&}'t;        |(|)d   |)d
   |      }*|*s/|j=                  d
|||&|'|*f       G t	        |      D ]E  }%||%   \  }&}' ||&|'|      \  }&}'| j?                  ||%|&|'      }+|+s/|j=                  d|||&|'|+f       G  |jA                          tC               },|jE                         D ]  }-|,j=                  |-d           |,S )Nr   z$_bubblePlot not supported for 3d yetr   zinFill not supported for 3d yetr   )
_FakeGroup)_make_3d_line_infofind_intersectionsr<  _3d_tilewidthr   _find_intersections)copy)smallr,   r*   ro   )fillColorShaded	tileWidthr+   r*   r,   shadingr.   r)   )#rV   r   r   r   r   r   r|   reverser9  rG  r7  r8  $reportlab.graphics.charts.linechartsrI  !reportlab.graphics.charts.utils3drJ  rK  r   r=  rN  r   insertr   r+   rD  r   r*   r   r.   r   rp   r   sortr	   value).rN   r   r   	positionsr   r4   r9  rG  r7  r8  rI  FrJ  rK  rQ  rN  
fpositionsIicir	  r   r   jcr   rZ   r\   r   r   r[   r   rC  z1r   frowx0r   r   r  r  r  r
  r.   LrY   rM   s.                                                 rD   r  zLinePlot3D.makeLines  s   T-5
EEE~ ''OO	s9~&'  !))+i-<<<z ==,,,,CL\??  -/_Q7It1$7%!#d9"56
&z	B  5GAa!1uAqM((2qe45 !	&
I"J _
 1	/EE"CCAzz%*"45H++H8%6=Du%BfBx/ ,,]3

.. %e,D!!WFB!&qT!3 (!%eB*Ar2r2r2 ' ($),0dTX(+	-
 "$RB( x*"//X.**++ =B ZFB%bB/FB+GBqE"Q%IFquua2bF%;<	= q /UB!"R+B((r2>aeeQr"R1-.	/[1	/f 	
G(AAEE!B%L(rC   N)r5   r6   r7   r8   rz   r9   r:   rA   r7  r8  r9  r:  r   rD  rG  r  rB   rC   rD   r6  r6    sc    Hxg6xg6h-LMh-BC	
H GGFF
-2jrC   r6  ) i0      Y@)韼0gq"Uo
Y@)c0gt	dY@)0gY@)+0g=hY@)0gkRY@)0g#޺Y@)V0g޴ϙY@)0grwY@)0g_i]^Z@)0g#T[@)0g/+^v[@)J0bȺ[@)0rs  )s1gY?[@)1gr[@);1ga:{[@)1g'Q=c[@)1gCU[@)f1gL[@)1gі⠍[@)/	1g`[@)	1g R\@)	1g%^O.\@)Z
1gc3v\@)
1g+m\@)-1g^;[@)-1gP[@)K.1g&}kS\@).1g[@)/1gUP[@)v/1g|\pSe\@) re  )rg  rf  )rh  g333333Y@)ri  g     Y@)rj  gyY@)rk       Y@)rl  r  )rm  fffffY@)rn  r  )ro  g33333Y@)rp  gffffffZ@)rq  g33333[@)rr  gfffff[@)rt  g[@)ru  gfffffF\@)rv  ǧ[@)rw  g33333[@)rx  g33333\@)ry  gfffff[@)rz  g33333S[@)r{  g[@)r|  g[@)r}  fffff&\@)r~  gL\@)r  皙y\@)r  g\@)r  g,\@)r  r  )r  g33333\@)r  g\@)r  r  )r  gfffff\@c                       e Zd ZdZd Zy)SimpleTimeSeriesPlotzsA customized version of LinePlot.
    It uses NormalDateXValueAxis() and AdjYValueAxis() for the X and Y axes.
    c                     t         j                  |        t               | _        t	               | _        t        | _        y rH   )rz   rm   r   r   r   r   _monthlyIndexDatar   r   s    rD   rm   zSimpleTimeSeriesPlot.__init__  s*    $.0$,%	rC   N)r5   r6   r7   rq   rm   rB   rC   rD   r  r    s    &rC   r  c                   Z    e Zd ZdZ ee edd       eed            Zd Z	d
dZ
d	 Zy)GridLinePlota  A customized version of SimpleTimeSeriesSPlot.
    It uses NormalDateXValueAxis() and AdjYValueAxis() for the X and Y axes.
    The chart has a default grid background with thin horizontal lines
    aligned with the tickmarks (and labels). You can change the back-
    ground to be any Grid or ShadedRect, or scale the whole chart.
    If you do provide a background, you can specify the colours of the
    stripes with 'background.stripeColors'.
    Nz3Background for chart area (now Grid or ShadedRect).r"   z&Scalefactor to apply to whole drawing.)rS   
backgroundscaleFactorc                 $   ddl m} t        j                  |        d | _        t               | _        d| j                  _        d| j                  _        d| j                  _	        d| j                  _
        |j                  | j                  _        y )Nr   r   
horizontalr   r   )reportlab.libr   r  rm   r  r   r  orientationuseRectsuseLinesr*   r   r+   )rN   r   s     rD   rm   zGridLinePlot.__init__  sd    (%%d+&&2##$ #$ &)#&,ll#rC   c                    ddl m} |st        dd      }t               }d|_        d|_        d|_        d|_        t        |_	        d|_
        |j                  |_         |j                  d	d
dddd	      }||j                  d   _        d|j                  d   _        d |j                  d   _         |j                  dddddd	      }||j                  d   _        d|j                  d   _        ddg|j                  d   _        d|j"                  j$                  _        d|j"                  j$                  _        d|j"                  j$                  _        d|j"                  j$                  _        d|j"                  j$                  _        d|j"                  j$                  _        d|j"                  _        d|j4                  _        d|j4                  _        d|j4                  j$                  _        t;               |_        |j>                  |j@                  g|j<                  _!        d|j<                  _"        |jG                  |d       |S )Nr   r   r   r   r   r   r   r   d   A      zPANTONE 288 CV)spotNamedensityr)   O   [   zPANTONE Wm Red CVr   r   startr  iiz	{mm}/{yy}z%5d%% r   rT   plot)$r  r   r   r  r   r   r   r   r  r   r   r   r+   
PCMYKColorr   r*   r,   r   labelsfontSize
textAnchor	boxAnchorangledxdyxLabelFormatr   labelTextFormattickLeftr   r  pink	lightbluestripeColorsr  rp   )rN   r   r   rX   c0c1s         rD   r   zGridLinePlot.demo  s   (c3'G^	#Vs2a5EsS"$"#&*#VqBq3FPST"$"#'(e#(*%*1'),&%(""#"$%0"(0%!"(*%&,kk63C3C%D"$.!BvrC   c                 F   | j                   | j                  }}|r||_        |r||_        |j                  | j                  | j
                  | j                         |j                  | j                         |j                  d      }|| j
                  | j                  z   kD  s|| j
                  k  r| j
                  }n|}|j                  | j                  || j                         |j                  | j                         | j                  }t        |t              r.|j                  dk(  r|j                  r{t!        t#        |j                  |j$                  g|j                  z               }g }t'        t)        |      dz
        D ]  }|j+                  ||dz      ||   z
         ! ||_        n#|j                  dk(  r|j                  rt!        t#        |j                  |j$                  g|j                  z               }	g }t'        t)        |	      dz
        D ]  }|j+                  |	|dz      |	|   z
         ! ||_        nt        |t.              rz| j                  |j0                  _        | j
                  |j0                  _        | j                  |j0                  _
        | j                  |j0                  _        | j                  |j2                  _        | j
                  |j2                  _        | j                  |j2                  _
        | j                  |j2                  _        |j0                  j                  dk(  r|j                  rt!        t#        |j                  |j$                  g|j                  z               }g }t'        t)        |      dz
        D ]  }|j+                  ||dz      ||   z
         ! ||j0                  _        n|j0                  j                  dk(  r|j                  rt!        t#        |j                  |j$                  g|j                  z               }	g }t'        t)        |	      dz
        D ]  }|j+                  |	|dz      |	|   z
         ! ||j0                  _        |j2                  j                  dk(  r|j                  rt!        t#        |j                  |j$                  g|j                  z               }g }t'        t)        |      dz
        D ]  }|j+                  ||dz      ||   z
         ! ||j2                  _        n|j2                  j                  dk(  r|j                  rt!        t#        |j                  |j$                  g|j                  z               }	g }t'        t)        |	      dz
        D ]  }|j+                  |	|dz      |	|   z
         ! ||j2                  _        | j5                          | j                  | j                  | j6                  }}}
|r|dk7  r|dd|ddf_        n
t;               }|j=                  | j?                                |j=                  | j                          |j=                  | j                         |j=                  | jA                                |S )Nr   rT   r   r  )!r   r   r  r  r   r   r   r  r   r   r   r  r   r   r  _tickValuesr   r   	_valueMinr   r   r   
deltaStepsr   grid0grid1r   r  	transformr	   rp   r  r  )rN   xvayvar$  r   backxposstepsr_  yposr   r   r  rY   s                 rD   r#  zGridLinePlot.draw  s   ??DOOSss4dii  1dfft{{228OAA4::.dii dD!:-#//C		CMM?S__+LMNs4y{+ 6ALLacT!W!456"'!!\1cooC		CMM?S__+LMNs4y{+ 6ALLacT!W!456"'j)66DJJL66DJJL#zzDJJ $DJJ66DJJL66DJJL#zzDJJ $DJJ zz%%3C		CMM?S__+LMNs4y{+ 6ALLacT!W!456(-

%''<7COOC		CMM?S__+LMNs4y{+ 6ALLacT!W!456(-

%zz%%3C		CMM?S__+LMNs4y{+ 6ALLacT!W!456(-

%''<7COOC		CMM?S__+LMNs4y{+ 6ALLacT!W!456(-

%%)ZZd>N>N{v;>&1k!A>AKA	d!!#$	doo	doo	dnnrC   rH   )r5   r6   r7   rq   r8   rz   r9   r@   rA   rm   r   r#  rB   rC   rD   r  r    s<     H!$-bc">8`a
H
	3"HTrC   r  c                       e Zd ZdZd Zd Zy)AreaLinePlotz@we're given data in the form [(X1,Y11,..Y1M)....(Xn,Yn1,...YnM)]c                 \    t         j                  |        d| _        d| _        g d| _        y )Nr   ))r      r  r  )r)      r      )r   r  F   (   )rz   rm   r   r|   r   r   s    rD   rm   zAreaLinePlot.__init__i  s&    $ !=	rC   c                    	 | j                   }t        |      }t        |d         }|dgz  }g | _         t        d|      D ]\  }g }t        |      D ]/  }||   ||   |   z   ||<   |j                  ||   d   ||   f       1 | j                   j                  |       ^ t        j                  |       || _         S # | _         w xY w)Nr   r   )r   r   r   r   rz   r#  )rN   odatar   mSr_  Dr	  s           rD   r#  zAreaLinePlot.drawo  s    	IIEE
AE!HA1#ADI1QZ $q 1AQ4%(1+-AaDHHeAhqk!A$/01 		  #$ ==&DIDIs   B1B; ;	CN)r5   r6   r7   rq   rm   r#  rB   rC   rD   r  r  g  s    J>rC   r  c                       e Zd Zd Zy)SplitLinePlotc                    t         j                  |        t               | _        t	               | _        g d| _        d | j
                  _        d| j
                  _        d| j
                  _	        d| j
                  _
        t        j                  d      | j                  d   _        t        j                  d      | j                  d   _        t        j                  d      | j                  d   _        y )N))i1ffffff?皙?        )i1r  r  r  )iQ1r  r  r  )i1r  r  r  )i1r  r  r  )i}1r  r  r  )i1r  r  r  )i1r  r  r  )i	1r  r  r  )im1r  r  r  )i1r  r  r  )i51r  r  r  )i1r  r  r  )i1r  r  r  )ia1r  r  r  )i1r  r  r  )i)1r  r  r  )i1r  r  r  )i1r  r  r  )i1r  r  r  )i1r  r  r  )i}1r  r  r  )i1r  r  r  )iE1r  r  r  )i1r  r  r  )i1r  r  r  )iq1r  r  r  )i1r  r  r  )i91r  r  r  )i1r  r  r  )i1r  r  r  )i2r  r  r  )i)2r  r  r  )i2r  r  r  )i2r  r  r  )iU2r  r  r  )i2r  r  r  )i2r  r  r  )i2r  r  r  )i2r  r  r  )iI2r  r  r  )i2r  r  r  )i2r  r  r  )i>2r  r  r  )i9?2r  r  r  )i?2r  r  r  )i@2r  r  r  )ie@2r  r  r  )i@2r  r  r  )i-A2r  r  r  )iA2r  r  r  )iA2r  r  r  )iYB2r  r  r  )iB2r  r  r  )i!C2r  r  r  )ie2r  r  r  )iIf2r  r  r  )if2r  r  r  )ig2r  r  r  )iug2r  r  r  )ig2r  r  r  )i=h2r  r  r  )ih2r  r  r  )ii2r  r  r  )iii2r  r  r  )ii2r  r  r  )i1j2r  r  r  )i2r  r  r  )iY2Q?
ףp=
?r  )i2r  r  r  )i!2r  r  r  )i2r  r  r  )i2r  r  r  )iM2r  r  r  )i2r  r  r  )i2r  r  r  )iy2r  r  r  )iݐ2r  r  r  )iA2r  r  r  )i2r  r  r  )ii2Q?RQ?r  )iʹ2r  r  r  )i12r  r  r  )i2r  r  r  )i2r  r  r  )i]2r  r  r  )i2r  r  r  )i%2r  r  r  )i2r  r  r  )i2r  r  r  )iQ2r  r  r  )i2r  r  r  )iy2
ףp=
?Q?r  )i2r  r  r  )iA2r  r  r  )i2r  r  r  )i	2r  r  r  )im2r  r  r  )i2r  r  r  )i52r  r  r  )i2r  r  r  )i2r  r  r  )ia2r  r  r  )i%3r  r  r  )i3(\?Gz?r  )i3r  r  r  )iQ3r  r  r  )i3r  r  r  )i3r  r  r  )i}3r  r  r  )i3r  r  r  )iE3r  r  r  )i3r  r  r  )i3r  r  r  )iq3r  r  r  )i5)3r  r  r  )i)3)\(?Q?r  )i)3r  r  r  )ia*3r  r  r  )i*3r  r  r  )i)+3r  r  r  )i+3r  r  r  )i+3r  r  r  )iU,3r  r  r  )i,3r  r  r  )i-3r  r  r  )i-3r  r  r  )iEP3r  r  r  )iP3
ףp=
?r   Q?)iQ3r  r   r  )iqQ3r  r   r  )iQ3r  r   r  )i9R3r  r   r  )iR3r  r   r  )iS3r  r   r  )ieS3r  r   r  )iS3r  r   r  )i-T3r  r   r  )iT3r  r   r  )iUw3r  r   r  )iw3333333?=
ףp=?(\?)ix3r  r  r  )ix3r  r  r  )ix3r  r  r  )iIy3r  r  r  )iy3r  r  r  )iz3r  r  r  )iuz3r  r  r  )iz3r  r  r  )i={3r  r  r  )i{3r  r  r  )ie3r  r  r  )iɞ3p=
ף?r  RQ?)i-3r  r  r  )i3r  r  r  )i3r  r  r  )iY3r  r  r  )i3r  r  r  )i!3r  r  r  )i3r  r  r  )i3r  r  r  )iM3r  r  r  )i3r  r  r  )iu3r  r  r  )i3皙?r  r   )i=3r  r  r   )i3r  r  r   )i3r  r  r   )ii3r  r  r   )i3r  r  r   )i13r  r  r   )i3r  r  r   )i3r  r  r   )i]3r  r  r   )i3r  r  r   )i3r  r  r   )i3p=
ף?Gz?r   )iM3r  r  r   )i3r  r  r   )i3r  r  r   )iy3r  r  r   )i3r  r  r   )iA3r  r  r   )i3r  r  r   )i	3r  r  r   )im3r  r  r   )i3r  r  r   )i4r  r  r   )i4ro   皙?r   )i]4ro   r  r   )i4ro   r  r   )i%4ro   r  r   )i4ro   r  r   )i4ro   r  r   )iQ4ro   r  r   )i4ro   r  r   )i4ro   r  r   )i}4ro   r  r   )i4ro   r  r   )i:4ro   r  r   r   i3  iÙ r   i3  r)   )r  rm   r   r   r   r   r   requiredRangeleftAxisPercentleftAxisOrigShiftMinleftAxisOrigShiftIPCr   toColorr   r+   r   s    rD   rm   zSplitLinePlot.__init__  s    d#.0'/ xM	(,%*+'/0,/0,$*NN8$<

1!$*NN8$<

1!$*NN8$<

1!rC   N)r5   r6   r7   rm   rB   rC   rD   r  r    s    =rC   r  c           	          t        | t        t        f      s| f} | D cg c]  }|s|	 } }| xr' t        t        t	        t
        ||fd|                   xs dS c c}w )z0return max stringWidth for the list of strings Tc                      || ||      S rH   rB   )tsWfNfSs       rD   <lambda>z_maxWidth.<locals>.<lambda>  s    PRSTUWXZP[ rC   r   )r   tupler   r   r   r   )TfontNamer  _fs       rD   	_maxWidthr    sZ    at%A4q2A`T#+h[\]^_`edee 	s
   AAc            
          e Zd ZdZ ed+i ded eed      d eed      d eed	      d
 ee	d      d eedd      d eed      d eed      d ee
d      d ee
d      d eed      d ee	d      d ee	d      d eed      d  eed!      d" eed#      d$ eed%      Zd& Zd' Zd,d)Zd* Zy()-ScatterPlotzA scatter plot widgetrS   r   z!Width of the area inside the axesr"   r   z"Height of the area inside the axesouterBorderOnz/Is there an outer border (continuation of axes)outerBorderColorzColor of outer border (if any)labelOffsetz.Space between label and Axis (or other labels)r   r$   axisTickLengthszLenth of the ticks on both axesaxisStrokeWidthzStroke width for both axesxLabelzLabel for the whole X-AxisyLabelzLabel for the whole Y-Axisr   z#Data points - a list of x/y tuples.r+   z#Color used for border of plot area.r-   r{   leftPaddingzPadding on left of drawingrightPaddingzPadding on right of drawing
topPaddingzPadding at top of drawingbottomPaddingzPadding at bottom of drawingc                 N   t         j                  |        d| _        d| _        d| _        t
        j                  | _        d | _        d}d}d}d | j                  _
        d | j                  _        d | j                  _        d| j                  _        d| _        d	| j                  j                   _        d
| _        d	| j                  j                   _        g d| _        d| _        d| _        d| _        d| _        d| _        | j*                  |z   |dz  z   | _        | j2                  t5        t7        | j                  j                        | j                  j                   j8                  | j                  j                   j"                        z   | _        | j0                  |z   |z   | j                  j                   j"                  z   | _        | | j                  j                   _        || j                  _        || j                  _         d| j                  _!        | | j                  j                   _"        || j                  _#        || j                  _         d| j                  _!        d| _$        d| jJ                  _        d| jJ                  _&        d| jJ                  _"        d| _'        tQ        dd      | jR                  _*        tQ        dd      | jR                  d   _*        tQ        dd      | jR                  d   _*        t
        jV                  | jR                  d   _,        y )N   M   r   r   r)   r   z%szX Labler   zY Lable)))gQ?g=
ףp]O@)gl?gX9v.K@)g~jt?gX91@))g(\?gˡE='@)gx&1?g rhI@)g+?gE<Q@))gv?gFԸU@)gMb?g
ףp=A@)gK7A?gfffffB@r   r   r   r  z%.2fer   )r   r   FilledSquare)-rz   rm   r   r   r  r   r   r  r  r   r   r   r   r  r   r   r  r  r  r   r   r  r  r  r  r   r  r   r  r   r  tickDownr*   
rangeRoundr  r  r   r~   r  r}   r   r   r.   greenr+   )rN   _labelOffset_axisTickLengths_axisStrokeWidths       rD   rm   zScatterPlot.__init__  sq   $
 &#' #' $(!+/'*+'*+'
&	 !!"22LNCvviDOO$<$< =t?U?U?^?^`d`o`o`v`v``  A  A##$44\A$//BXBXBaBaa%1M!#3 &6##)"%1M!#3 &6##)"##$ $'!)+$^;

'Q?

1'A>

1$*LL

1!rC   c                    | j                   | j                  j                  z   | j                  j                  j                  dz  z   | j
                  j                  j                  z   }|dt        t        | j                  j                        | j                  j                  j                  | j                  j                  j                        z  z   }|| j                  z   | j                  z   }d| j
                  j                  z  }|t        || j                  j                  j                  | j                  j                  j                        z   }| j                  | j
                  j                  z   | j
                  j                  j                  dz  z   | j
                  j                  j                  dz  z   }|| j                  j                  j                  z   | j                   z   | j"                  z   }||fS )Nr)   r   z%.2f%%)r  r   r  r  r  r   r  r  r   r   r  r   r  r  r  r  r   r  )rN   txr  tys       rD   _getDrawingDimensionsz!ScatterPlot._getDrawingDimensions  s   doo6668N8N8Q8QRS8STUYUdUdUkUkUtUttq3t778$//:P:P:Y:Y[_[j[j[q[q[z[z{{|djj=***DOO,,,yDOO22;;T__=S=S=\=\]^ 8 88$//:P:P:S:STU:UVX\XgXgXnXnXwXwxyXyzdoo$$---dkk9$//I2wrC   Nc                     |s| j                         \  }}t        ||      }|j                  | j                                |S rH   )r  r   rp   r#  )rN   r   r  r  s       rD   r   zScatterPlot.demo  s9    ,,.EBrbnGDIIK rC   c                    t        | j                  j                  j                        j                  j
                  }|dk(  rd}|| j                  j                  j                  z  }t        j                  |       }| j                  }|rt               }| j                  | j                  z   dz  |_        d|_        | j                  j                  j                  |_        | j                  j                  j                  |_        |j                  |       |j                  |       | j                   }|rt               }d|_        d|_        | j                  | j$                  dz  z   |_        | j&                  j                  j                  |_        | j&                  j                  j                  |_        |j                  |       |j                  |       | j(                  rg|j                  t+        | j                  | j                  | j                  | j$                  | j,                  | j&                  j.                  d              |j1                  | j2                  | j4                         |S )Nr   g`"?g       @Z   )r+   r*   r-   )r   r   r  r  faceascentr  rz   r#  r   r   r   r   r   r   rp   r  r  r   r   r  r
   r  r*   shiftr  r  )rN   r  rX   r   xlr  yls          rD   r#  zScatterPlot.draw  s   t--667<<CC19Fdoo,,555 ]]4 wBFF4::%s*BDBD//0099BK//0099BKJJvFF2JwBBHBDFF4;;s?*BD//0099BK//0099BKJJvFF2J FF4

DKK%)%:%:%)__%@%@#') *
 	!!4#5#56	rC   rB   rH   )r5   r6   r7   rq   r8   rz   r9   r:   r_   r;   isString
isAnythingrA   rm   r  r   r#  rB   rC   rD   r  r    sK    H (8[\)(9]^ %1Ar$s (4MHh'i	
 #/x>n}~" '38Bc&d '38B^&_ *(9UV *(9UV (
9^_ #/}Ch"i !-]As t #/x>Z"[ $0?\#] ".h=X!Y  %1@^$_!H&@1D	'rC   r  c                  *   t        dd      } ddg}t               }d|_        d|_        d|_        d|_        ||_        d|_        t        j                  |_
        t        d	      |j                  _        d
|j                  d   _        d|j                  d   _        d|j                  _        d|j                  _        d|j                  _        d|j&                  _        d|j&                  _        d|j&                  _        | j)                  |       | S )2A line plot with non-equidistant points in x-axis.r   r   r   r   r   r   r   r   UK_Flagr)   r   r   r   r   )r   rz   r   r   r   r   r   r   r   r   r+   r   r   r.   r*   r   r   r   r   r   rp   r   r   rX   s      rD   sample1ar$  '  s     c3G 23
D
 
BBDBDBIBHBGBN\\BN +BHHOBHHQKBHHQKBMMBMMBMMBMMBMMBMMKKONrC   c                     t        dd      } ddg}t               }d|_        d|_        d|_        d|_        ||_        d|_        t        d	      |j                  _
        d
|_        t        j                  |_        d|j                  _        d|j                  _        g d|j                  _        d|j                  _        d|j(                  _        d|j(                  _        d|j(                  _        | j-                  |       | S )r!  r   r   r   r   r   r   r   r   Circler   r   r   r   r)   r   r   r   r   %2.1fr   )r   rz   r   r   r   r   r   r   r   r   r.   r   r   r   r+   r   r   r   
valueStepsr  r   r   rp   r#  s      rD   sample1br*  M  s     c3G 23
D
 
BBDBDBIBHBGBN *BHHO B\\BNBMMBMM3BMM$+BMM!BMMBMMBMMKKONrC   c                  R   t        dd      } ddg}t               }d|_        d|_        d|_        d|_        ||_        d|_        t        d	      |j                  d
   _
        t        d      |j                  d   _
        d|_        t        j                  |_        d
|j                  _        d|j                  _        g d|j                  _        d|j                  _        d
|j(                  _        d|j(                  _        g d|j(                  _        | j+                  |       | S )r!  r   r   r   r   r   r   r   r   r   r   r&  r   r   r'  r(  r   )r   r)   r   r   r   )r   rz   r   r   r   r   r   r   r   r   r.   r   r   r   r+   r   r   r   r)  r  r   rp   r#  s      rD   sample1cr,  q  s     c3G 23
D
 
BBDBDBIBHBGBN#N3BHHQK#H-BHHQK B\\BNBMMBMM3BMM$+BMM!BMMBMM.BMMKKONrC   c                 T    | D cg c]  }t        |d         |d   dz  f c}S c c}w )z=Convert date strings into seconds and multiply values by 100.r   r   r  )str2seconds)seriesr   s     rD   preprocessDatar0    s.     4::a[1!S):::s   %c                     t        dd      } dg}t        |d         |d<   t               }d|_        d|_        d|_        d|_        ||_        d|_        t        d	      |j                  _        t        j                  |_        t        t!        d
            }t        t!        d            }t        t!        d            }t        t!        d            }t        t!        d            }t        t!        d            }t        t!        d            }	||j"                  _        |	|j"                  _        |||||||	g|j"                  _        t*        |j"                  _        d|j"                  j.                  d   _        d|j"                  j.                  d   _        d|j2                  _        d|j2                  _        d|j2                  _        d|j2                  _        | j7                  |       | S )r!  r   r   ))
25/11/1991r   )
30/11/1991gea?)
31/12/1991ga+e?)z
31/01/1992gvq-?)z
29/02/1992gm4@?)
31/03/1992gyT?)z
30/04/1992g )
k?)z
31/05/1992gcȎ{?)
30/06/1992gy,?)z
31/07/1992gQ צ?)z
31/08/1992g[B>٬?)
30/09/1992gY)?)z
31/10/1992g~@?)z
30/11/1992g30?)
31/12/1992g`"?r   r   r   r   r   r   r2  r3  r4  r5  r6  r7  r8  iir)   z%4.2fr  n   )r   r0  rz   r   r   r   r   r   r   r   r   r.   r   r   r+   r   r   r   r   r   r)  seconds2strr  r  r  r   r   rp   )
r   r   rX   r  t0t1t2t3t4ends
             rD   sample2rA    s    c3G	
D& T!W%DG	BBDBDBIBHBGBN 1BHHO\\BN;|,-E	L)	*B	L)	*B	L)	*B	L)	*B	L)	*B
\*
+C"BMM BMM %r2r2r3?BMM$/BMM!!$BMM!$BMM$+BMM! BMM BMMBMMKKONrC   c                  d   t        dd      } t               }| j                  |       t        |j                  d   d      |j                  d   g|_        t        t        j                  d      dd       |j                  d   _	        d |j                  d   _
        d |j                  d   _
        | S )Nr   r   r   r   z#9f9f9f)r-   r*   r+   )r   r  rp   r   r   rh   r   r  r   r0   r+   )dcharts     rD   sampleFillPairedDatarE    s    CA "EEE%L Aq1%**Q-@EJ!FNN9,ERS`deEKKN!%EKKN!%EKKNHrC   N)C__version__rq   r  r   reportlab.lib.validatorsreportlab.lib.attrmapreportlab.lib.utilsr   r   r1  r   r	   r
   r   r   r   reportlab.graphics.widgetbaser   r   r   $reportlab.graphics.charts.textlabelsr   reportlab.graphics.charts.axesr   r   r   r   reportlab.graphics.charts.utils"reportlab.graphics.widgets.markersr   r    reportlab.graphics.widgets.gridsr   r   r   reportlab.pdfbase.pdfmetricsr   r   reportlab.graphics.charts.areasr   utilsr   r!   rI   rF   rP   rb   rh   rs   rw   rU  rx   rz   r6  r  r  r  r  r  r  r  r$  r*  r,  r0  rA  rE  rB   rC   rD   <module>rS     s@  
 G   & # . ^ ^ Y Y 6 f f - I L L = 4 !
 
# 
%_ 
% : : 	vm 		 	 Cc'  c'JM M^@A? B&8 &R' Rh8 2=L =fQ( Qf#L!H"J;:xrC   