
    Q?h                       S r SrSSKrSSKrSSKJr  SSKJr  SSKJ	r	J
r
JrJrJrJrJrJrJrJrJrJr  SSKJrJr  SSKJrJr  SS	KJrJr  SS
KJr  SSK J!r!J"r"J#r#  SSK$J%r%J&r&J'r'J(r(J)r)  SSK*J+r+J,r,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7   " S S\"5      r8 " S S\35      r9 " S S\95      r: " S S\95      r; " S S5      r< " S S\95      r= " S S\=\:5      r> " S  S!\=\;5      r?S" r@S# rAS$ rBS% rCS& rDS' rES( rFS) rGS* rHS+ rIS, rJS- rK/ S.QrLS/ rMS0 rNS1 rOS2 rPS3 rQS4 rRS5 rSS6 rTS7 rUS8 rVS9 rWS: rXS; rYS< rZS= r[S> r\S? r]S@ r^/ S.QrLSA r_SB r`SC raSD rbSE rcSF rdSG reSH rf " SI SJ\(5      rgg)Kz3.3.0zThis module defines a variety of Bar Chart components.

The basic flavors are stacked and side-by-side, available in horizontal and
vertical versions. 

    N)literal_eval)colors)isNumberisNumberOrNoneisColorOrNoneisString
SequenceOf	isBooleanisStringOrNoneNoneOrisListOfNumbersOrNoneEitherOrOneOfisInt)isStryieldNoneSplits)uSymbol2SymbolisSymbol)AttrMapAttrMapValue)stringWidth)TypedPropertyCollection
PropHolder
tpcGetItem)LineRectGroupDrawingPolyLine)XCategoryAxis
YValueAxisYCategoryAxis
XValueAxis)BarChartLabelNoneOrInstanceOfNA_Label)PlotArea)_objStrcmpc                       \ rS rSr\" \" \SS9\" \SS9\" \SS9\" \SS9\" SSS	S
9\" \	SS9\" \
" \5      SS	S
9\" \SS9\" \
" \5      SS9S9	rS rSrg)BarChartProperties   zColor of the bar border.desczColor of the bar interior area.zWidth of the bar border.zDash array of a line.Nz,A widget to be used instead of a normal bar.   r.   advancedUsagez0Text to be associated with a bar (eg seriesname)z!None or makeMarker('Diamond') ...z(minimum width/height that will be drawn.z%if this bar should be drawn as a line)	strokeColor	fillColorstrokeWidthstrokeDashArraysymbolnameswatchMarkerminDimenisLinec                 f    S U l         [        R                  U l        SU l        S U l        S U l        g )N      ?)r2   r   bluer3   r4   r6   r5   selfs    U/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/charts/barcharts.py__init__BarChartProperties.__init__,   s,    #    )r3   r2   r5   r4   r6   )__name__
__module____qualname____firstlineno__r   r   r   r   r   r   r   r   r   r
   _attrMaprA   __static_attributes__ rC   r@   r+   r+      s    "=7QR 5VW"82LM&'<CZ[d)WfghH+]^#F8$4;^mno5_`fY/6]^

H$rC   r+   c                   r   \ rS rSrSr\" SP0 S\_S\" \" \	\" \
\45      45      SSS9_S\" \S	S
9_S\" \SS
9_S\" \SS
9_S\" SSS
9_S\" SSS
9_S\" SSS
9_S\" SSS
9_S\" SSS
9_S\" SSS
9_S\" SSSS9_S\" SSS
9_S \" \	S!SS9_S"\" \S#SS9_S$\" SS%S
9_S&\" \S'S
9_S(\" \" S)S*S+5      S,S
9_S-\" SS.SS9_S/\" \S0S
9_S1\" \S2SS9_S3\" \" \" \S4S4SS59S4SSS59S65      _6rS7 rSQS8 jrS9 rS: rS; rS< rS= rS> rS? rS@ rSA rSB rSC rSRSD jrSSSE jr SF r!SG r"SH r#SI r$SJ r%SK r&SL r'SM r(SN r)SOr*g)TBarChart4   z(Abstract base class, unusable by itself.BASEuseAbsolutezrFlag to use absolute spacing values; use string of gsb for finer control
(g=groupSpacing,s=barSpacing,b=barWidth).r/   r0   barWidthzThe width of an individual bar.r-   groupSpacingzWidth between groups of bars.
barSpacingzWidth between individual bars.barsNzHandle of the individual bars.	valueAxiszHandle of the value axis.categoryAxiszHandle of the category axis.dataz/Data to be plotted, list of (lists of) numbers.	barLabelsz!Handle to the list of bar labels.barLabelFormatzZFormatting string or function used for bar labels. Can be a list or list of lists of such.barLabelCallOutz`Callout function(label)
label._callOutInfo = (self,g,rowNo,colNo,x,y,width,height,x00,y00,x0,y0)barLabelArrayzGexplicit array of bar label values, must match size of data if present.reversePlotOrderz,If true, reverse common category plot order.naLabelzLabel to use for N/A values.annotationsz<list of callables, will be called with self, xscale, yscale.categoryLabelBarSizez=width to leave for a category label to go between categories.categoryLabelBarOrderfirstlastautoz,where any label bar should appear first/last	barRecordzJcallable(bar,label=labelText,value=value,**kwds) to record bar informationzIndexOverridesa!  None (the default ie use old z ordering scheme) or a ',' separated list of key=value (int/float) for new zIndex ordering. If used defaults are
    background=0,
    categoryAxis=1,
    valueAxis=2,
    bars=3,
    barLabels=4,
    categoryAxisGrid=5,
    valueAxisGrid=6,
    annotations=7categoryNALabelz'Label to use for a group of N/A values.seriesOrderr   )emptyOKNoneOKloz#dynamic 'mixed' category style casec                    U R                   nU[        U5      -  nXg   n[        US[        USS 5      5      n	[        US[        USS 5      5      n
[        US[        USS 5      5      n[        US[        USS 5      5      n[        US[        USS 5      5      nU(       a  [        XUS-  -   X5S-  -   U
5      $ [        USS5      (       Ga  X5S-  -   n[	        US	5      (       a  UR
                  nO [	        US	5      (       a  UR
                  nOS n[        X.X$-   UUR                  =(       d    UR                  UR                  UR                  S
9nU(       a/  [        XUS-  -   XR                  =(       d    UR                  5      nU(       a5  U(       a.  [        5       nUR                  U5        UR                  U5        U$ U=(       d    U$ [        X#XEXXS9$ )Nr2   r3   r5   r4   r8          @r:   Fr6   r2   r4   r5   )r4   r2   r5   r3   )rS   lengetattrr   hasattrr6   r   r2   r3   r4   r5   r   addr   )r?   rowNoxywidthheight	baseStylestyleIdxstyler2   r3   r5   r4   r8   yh2SLgs                     r@   makeSwatchSampleBarChart.makeSwatchSampleW   s   II	3y>)#e]GImTX4YZE;	+d0ST	!%):GIN_`d<efe]GE=QU4VWungiX\6]^!,rz!2I+iPPU8E**2I+Cuh''LLH--$$QAGS % 1 1 DU__ % 1 1&+&;&;=A
 nQrz#6G6G6Z5??[!QGaa6ME[(7M MrC   c                 H    [        [        U R                  U   SU5      5      $ )zreturn series name i or defaultr7   )r'   rn   rS   )r?   idefaults      r@   getSeriesNameBarChart.getSeriesNamez   s    wtyy|F7;<<rC   c                 @   U R                   R                  S;  d   SU R                   R                  -  5       eU R                  (       a  [        5       U l        [        5       U l        O[        5       U l        [        5       U l        [        SSSS5      U R                  R                  S   l        [        R                  " U 5        SU l        SU l        S	S
/U l        SU l        SU l        SU l        SU l        [)        [*        5      U l        SU R,                  l        SU R,                  l        S U l        S U l        SU R,                  l        [)        [8        5      U l        SU R:                  l        [>        R@                  U R:                  l!        S U R:                  l"        [>        RF                  U R:                  S   l$        [>        RJ                  U R:                  S   l$        [>        RL                  U R:                  S   l$        S =U l'        U l(        S U l)        g )N)rL   
BarChart3DzAbstract Class %s Instantiatedstackedparallelparallel_3dmixedrx   r   )d   n   x      )F   P   U   Z   
      cmiddler/      )*	__class__rD   _flipXYr"   rU   r#   rT   r    r!   r   rH   validater&   rA   rR   r[   rV   rO   rP   rQ   r   r$   rW   	boxAnchor
textAnchorrX   rZ   nudger+   rS   r4   r   blackr2   r5   redr3   greenr=   r\   re   rd   r>   s    r@   rA   BarChart.__init__~   s   ~~&&.GG  	DIilplzlz  mD  mD  JD  	DG<< -D'\DN -D'\DN7<YzR_`g7h""7+4$ ! '$&	 0?#& $,!"!  ! ,,>?	 !		 &		$(		!!'		!!'		!!'		!.22t+#rC   c                     U R                   R                  S:X  a  [        S5      e[        SS5      nU R                  5       nUR	                  U5        U$ )zShows basic use of a bar chartrL   z#Abstract Class BarChart has no demo   r   )r   rD   NotImplementedErrorr   rp   )r?   drawingbcs      r@   demoBarChart.demo   sH    >>""J.%&KLL#s#^^BrC   c           	         [        U SS 5      n[        U R                  5      nU(       d  [        U5       Vs/ s H  o34PM     nnGOU R                  n[        [        U5      5      n[        5       n/ nU H  nU Vs1 s H  nSUs=::  a  U::  d  M  O  M  UiM     n	nU	 Vs1 s H  o5R                  USS5      (       d  M  UiM      n
nU
(       a  X-  n	Xz-  nXj-  nU	(       d  Mo  UR                  [        U	5      5        Xi-  nM     U(       a!  UR                  S [        U5       5       5        U(       a!  UR                  S [        U5       5       5        X@l        g s  snf s  snf s  snf )Nrf   r   r:   Fc              3   &   #    U  H  o4v   M	     g 7fNrJ   .0sss     r@   	<genexpr>*BarChart.getSeriesOrder.<locals>.<genexpr>   s     82   c              3   &   #    U  H  o4v   M	     g 7fr   rJ   r   s     r@   r   r      s     72r   )rn   rm   rV   rangerS   set	checkAttrappendtupleextendsorted_seriesOrder)r?   bsnr   RrS   unseenlinessr|   gls              r@   getSeriesOrderBarChart.getSeriesOrder   s$   T--		N!&q*2A*A99Dq]FEEA"#0!Bq"xaxRxR!0#$J1Rr(5(Ib1JGAKELF1HHU1X&KF  888777) + 1Js#   E<E"E"E"!E' E'c                 :  ^^ U R                   R                  nU R                  m[        [	        [        [        T5      5      5      nTmUS;  aF  / mU4S jnUS:X  a  U" T6   O2U R                  5         U R                   H  nU" U4S jU 5       6   M     TU l	        g )Nr   r   c                    > [        S U  5       5      S/-  nUS S  nU  HB  n[        U5       H0  u  pEU=(       d    SnUS::  a  X$==   U-  ss'   M$  X==   U-  ss'   M2     MD     TR                  U5        TR                  U5        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   )rm   )r   ds     r@   r   BBarChart._getConfigureData.<locals>._accumulate.<locals>.<genexpr>   s     /QSVVQs   r   ư)max	enumerater   )Dpdatandatar   r   vrV   s         r@   _accumulate/BarChart._getConfigureData.<locals>._accumulate   s}    /Q/0!4aA(|Fe8!HMH!HMH  ,  E"E"rC   r   c              3   .   >#    U  H
  nTU   v   M     g 7fr   rJ   )r   j_datas     r@   r   -BarChart._getConfigureData.<locals>.<genexpr>   s     !6Aq%(As   )
rU   rx   rV   r   listmaprm   r   r   _configureData)r?   cAStyleccr   br   rV   s        @@r@   _getConfigureDataBarChart._getConfigureData   s    ##))yyc#dm$%44D# 	!U###%**A!6A!67 +"rC   c                     U R                  5         U R                  R                  U R                  5        U R                  R                  U R                  R
                  4$ )z Attempt to return the data range)r   rT   	_setRanger   	_valueMin	_valueMaxr>   s    r@   
_getMinMaxBarChart._getMinMax   sE       !4!45~~'')A)AAArC   c                 $   U R                   nUR                  U R                  U R                  U5        U R	                  5         UR                  U R                  5        UR                  S5      nUR                  (       d  XA:  a
  XAU-   ::  a  U$ U$ )z8Position and configure value axis, return crossing valuer   )	rT   setPositionrr   rs   r   	configurer   scale	forceZero)r?   orglengthvA	crossesAts        r@   
_drawBeginBarChart._drawBegin   so    ^^
tvvtvvv. 
T(() HHQK	LLY^	v:@Uy_\__rC   c                 	   U R                   nU R                  nUR                  U R                  5        U R	                  5         [        5       n[        U SS5      nU(       GdA  UR                  U R                  5       5        [        USS5      n[        USS5      nU(       d  UR                  X0UR                  S9  U(       d  UR                  X0UR                  S9  UR                  U R                  5       5        UR                  U5        UR                  U5        U(       a  UR                  X0UR                  S9  U(       a  UR                  X0UR                  S9  [        U SS5       H.  osR                  U" XR                  UR                  5      5        M0     U ?U$ [        SS	S
SSSSSS9nUR                  5       R                  S5       H  n	U	R                  5       n	U	(       d  M   U	R                  S5      u  pX;  aV  [!        SU
< SU< SSR#                  [%        UR'                  5       5       V
s/ s H  o< SX   < 3PM     sn
5      < 35      e [)        U5      n[+        U[,        [.        45      (       d   e XU
'   M     UR1                  5        V
Vs/ s H  u  pX4PM
     nn
nUR3                  5         U R                  5       nUR4                  R7                  S5      nU GH  u  pU
S:X  a!  UR                  U R                  5       5        M-  U
S:X  a  UR                  U5        MF  U
S:X  a  UR                  X0UR                  S9  Mh  U
S:X  a  UR                  U5        M  U
S:X  a  UR                  X0UR                  S9  M  U
S:X  a  UR                  U5        M  U
S :X  a  UR                  U5        M  U
S:X  d  M  [        U SS5       H.  osR                  U" XR                  UR                  5      5        M0     GM     U ?U$ !   [!        SU	< SU< SSR#                  [%        UR'                  5       5       V
s/ s H  o< SX   < 3PM     Os  sn
f sn
5      < 35      e= fs  sn
f !   [!        SXUSR#                  [%        UR'                  5       5       V
s/ s H  o< SX   < 3PM     Os  sn
f sn
5      4-  5      e= fs  snn
f )!z"finalize the drawing of a barchartrd   NdrawGridLastF)parentdimr]   rJ   r   r/   r         r         )
backgroundrU   rT   rS   rW   categoryAxisGridvalueAxisGridr]   ,=zBadly formatted zIndex clause z in z
allowed variables are

zUnknown zIndex variable zCBad zIndex value %r in clause %r of zIndex
allowed variables are
%sr   rU   r   rT   r   rS   rW   )rU   rT   r   r   calcBarPositionsr   rn   rp   makeBackgroundmakeGridgetGridDimsmakeBarsr   dictstripsplit
ValueErrorjoinr   keysr   
isinstancefloatintitemssortcontentspop)r?   cAr   r|   zIndexcAdglvAdglaZzkr   r   bls                 r@   _drawFinishBarChart._drawFinish  s   ^^
T(()G/5EE$%%'(B~e4EB~e4E"++a+H"++a+HEE$--/"EE"IEE"Ibkk!R^^kDbkk!R^^kDT-3UU1T((288;T5U3b a !"	A \\^))#.GGI(pCA :$fghijnjsjs  QW  XY  X^  X^  X`  Qa  ub  Qa  LM  @A  BC  BF  vG  Qa  ub  kc  &d  e  ev$QA%as4444 ! / #$''),)31!)A,FFHA#Bl?EE$--/0&EE"I**KK2>>KB^EE"I'KK2>>KBYEE!H^EE"I%$T-;UU1T((SUS[S[C\=];! $ Cp$lmntuyu~u~  \b  cd  ci  ci  ck  \l  @m  \l  WX  KL  MN  MQ  AR  \l  @m  vn  &o  p  p ubv$%lpqtz{  |E  |E  bh  ij  io  io  iq  br  Fs  br  ]^  QR  ST  SW  GX  br  Fs  |t  pu  &u  v  v,s<   0P<Q8(Q=#S6Q5Q"!Q5=0S-SSc                 
  ^%^&^'^(^)^*^+^,^-^.^/^0^1^2^3^4^5^6 U R                   m,T,(       a  U R                  m/OU R                  m/U R                  nUR                  m+U R
                  n[        U5      =o0l        [        [        [        [        U5      5      5      =U l        nU R                  nU R                  nU R                  n[        U SS5      n[        U SS5      n	U	S:X  a  T,=(       a    S=(       d    Sn	U	S:H  n	UR                   m1U R"                  m)[%        U)4S j['        U5       5       5      n
X:-
  nT1S:X  aC  U R(                  n[        U5      U
-
  nX-  nUS	-
  U-  nUS	:  a  UnUnOS=nnX-  S/-  m&T&S
S
 m'O.T1S;   a  S	nX-  nUS	-
  U-  nUnUnOUnUS/-  m&T&S
S
 m'UnS=n=nnX^-   U-   =U l        m-U R,                  m2T2(       a6  [/        T2[0        5      (       d  Sm2O SS	ST2;   -  -   SST2;   -  -   SST2;   -  -   m2OSm2[3        T+" S5      S	   5      nUU-
  nT2S:X  a  UT--  =U l        =n=nnOT2S:X  a  S=n=nnUR6                  m%OT2S	:X  a  SnUU-
  X_-   -  =nnOtT2S:X  a  SnUU-
  X-   -  =nnO_T2S:X  a  S=nnU(       a  UU-
  U-
  U-  OSnO@T2S:X  a  SnUU-
  X^-   -  =nnO+T2S:X  a  S=nnUU-
  U-
  U-  nOT2S:X  a  S	=nnUU-
  U-
  U-  nWU l        WU l        WU l        U R>                  nUR                  m4UR@                  m3URB                  URD                  nnUSs=::  a  U::  a  O  O	T4" S5      m*OSU:  a	  T4" U5      m*OUS:  a  T4" U5      m*T*U l#        UU-  m5SU-  U-  nUU-  UU-  -   nU(       a@  U	(       a  UUS-  -   U-  nUU-  nOUUU-  -   UU-  -   US-  -   U-  nUURH                  l%        / U l&        U RL                  RN                  nU RP                  nU%U&U'U(U*U+U,U-U.U/U0U1U2U3U4U5U64S jnT1S:w  a  Sn [S        U5       Hz  u  n!m0/ m(U(       a  US	-
  U!-
  OU!m6UT6U-  -   m6T)RU                  U!SS5      m.T.(       a  U S	-  n UUS	-
  U-  S-  -   m6OT6U U-  -  m6['        U5       H  n"U" U"U"5        M     U" T(5        M|     g
Sn [S        U R(                  5       H  u  n#n$[        U$5      S	::  a  SOSm1U$ H  n!U(       a  US	-
  U#-
  OU#m6UT6U-  -   m6/ m(UU!   m0T)RU                  U!SS5      m.T.(       a  U S	-  n UUS	-
  U-  S-  -   m6OT6U U-  -  m6['        U5       H  n"U" U"U"U-  U#-   5        M     U" T(5        M     M     g
)zWorks out where they go. default vertical.

Sets an attribute _barPositions which is a list of
lists of (x, y, width, height) matching the data.
r^   r   r_   rb   ra   r`   c              3   \   >#    U  H!  n[        TR                  US S5      5      v   M#     g7f)r:   FN)r  r   )r   _rS   s     r@   r   ,BarChart.calcBarPositions.<locals>.<genexpr>o  s(     [HZ1T^^Ahu=>>HZs   ),r   r/   Nr   r   r   r   r|   r   r         ?r   r   r   r<   g      @c                   > TS:X  a  TT" U 5      -  T-   T-   nOT" U 5      u  p4UT-   nTU    nUc  S nTnOTS;  au  T(       dn  US::  a4  T" T	U   5      nT(       a  UT:  a	  OUT:  a  TnT	U==   U-  ss'   T	U   nO6T" T
U   5      nT(       a  UT:  a	  OUT:  a  TnT
U==   U-  ss'   T
U   nOTnT" U5      U-
  nSUs=:  a  S::  a  O  O
SnUS:  a  SnTR                  T=(       a    XrUT4=(       d    X'TU45        g )Nr   r   r   :0yE:0yE>)r   )colNoaccxrr   r|   r  datumru   rs   _cscaleaccumNegaccumPosbarRowbaseLinecScaleflipXY
groupWidthr:   r   rowrx   rO   vARDvScalert   xVals           r@   _addBar*BarChart.calcBarPositions.<locals>._addBar  s$   A~wu~-4s:HJE} ::6e|"8D>2*.AhJAhJX %/ ("8D>2*.AhJAhJX %/ ( A*%%!FU{UFMM&7a&%7MAf;MNrC   r:   Fr   r   )+r   rs   rr   rU   r   rV   rm   _seriesCountr   r   r   
_rowLengthrQ   rR   rP   rn   rx   rS   sumr   r   _groupWidthrO   r	  strr
  _normFactor_scale_normFactorB_normFactorG_normFactorSrT   reverseDirectionr   r   	_baseLinelabelslabelPosFrac_barPositionsr   r[   r   r   )7r?   r  rV   seriesCount	rowLengthwGrR   rP   clbsclbo	lineCountseriesMLineCountr   barsPerGroupwBwSbGapBbGapSaW0aWfBfGfSr   vmvMoffsbGaplbpfaBPr[   r2  lineSeenrq   r#  sbsgr&  r'  r(  r)  rS   r*  r+  r,  r-  r:   r   r.  rx   rO   r/  r0  rt   r1  s7                                        @@@@@@@@@@@@@@@@@@r@   r   BarChart.calcBarPositionsS  s    &&C&&Cyy*-d)3'&)$s3t}*=&>>)__
==t215t3F;< 16 <WW}yy[kHZ[\	&2'>""Br7Y.L&Bq.*,BA~ " !!#-qc1H{H00L!*B"1$j0BEE+L !}H{HB!""B"(*b0:&&k#..!SK%7"88C;<N9OOPQSVZeSePffKF1IaL!4Z>.0m;D;r;B!^BbiiG!^B"uruo%B!^B"uruo%B!^MB"$"R%(B!B!^B"uruo%B!^MBR%(BB!^KBR%(BB ^^""r||B=b=ayHVbzH!VbzH!2vbyRxb T#Xs*RU
2b5(c136%)BII"  ''00	O 	O 	O@ '>H'o
s3C|a'%/d4i'x?MH!1!!3T 9# ==DHTM)D"9-EE%( .F . H"4#4#452&)"gqj
iE4D<!+b0"D$t)+DFu+C!^^E8UCF A#\!^T$9#$==-!&y!1eL&82&=> "2K   6rC   c                    U R                   n[        U[        [        45      (       a#  X1   n[        U[        [        45      (       a  X2   nUc  SnU$ US:X  a  U R                  U   U   nU$ [        U5      (       a  X0R                  U   U   -  nU$ [        US5      (       a  U" U R                  U   U   5      nU$ SU-  n[        U5      e)zreturn formatted label textNvalues__call__z6Unknown formatter type %s, expected string or function)	rX   r	  r   r   rZ   r   rV   ro   	Exception)r?   rq   r#  labelFmt	labelTextmsgs         r@   _getLabelTextBarChart._getLabelText  s    &&hU|,,H(D<00#?I  !**51%8I  8__ 99U#3E#::I  Xj)) 5!1%!89I  KXUCC. rC   c                 \   UR                   n[        USS5      nUS:H  nU(       a  U* nU=pU(       a  Sn
USU-  -   nUS:  =(       a    S=(       d    SU-  nUS:X  a  X5S-  -   nO?US	:X  a  U
S:  a  X:-   U-   nO+X6-
  nU	* n	O#US
:X  a  U
S::  a  X:-   U-   nOX6-
  nU	* n	OX:-   U-   nXl        XU	4$ )zCompute x, y for a label	boxTargetnormalantir   r<   r/   r   midhiri   )r   rn   _pmv)r?   labelrr   rs   rt   ru   r   btrj  pmvaluer  r   s                r@   _labelXYBarChart._labelXY&  s    U;x06z%E	Mq&B-u9*AXaxI%ISXaxI%IS	E!A
2vrC   c                 |    U R                  X#5      nU(       a$  U R                  XR                  X#4   XX4XVU5	        g g r   )re  	_addLabelrW   )	r?   r|   rq   r#  rr   rs   rt   ru   texts	            r@   _addBarLabelBarChart._addBarLabelC  s;    !!%.NN4!?5UV_ef rC   c
                 &   U	c  U R                   n	U	(       a{  U	R                  (       ai  [        R                  " U	5      n	U R                  R                  S:*  =(       a    S=(       d    Sn
Uc  U
nUc  U
nU R                  U	R                  XX#XEXgUS9
$ g g )Nr   r!  r"  )calcOnly)r\   rv  copyrT   r   ru  )r?   r|   rq   r#  rr   rs   rt   ru   rz  nar   s              r@   _addNABarLabelBarChart._addNABarLabelH  s|    :DLLr"''2B((!+5=A}ae~v>>"''2%e^f>gg 2rC   c                    UR                   (       Ga  [        XR                  UR                  5      nU R                  nU(       a  U R                  X'XiU5      u  pnOU R                  X&XxU	5      u  pn[        USS 5      nUb!  UR                  X5      nXnnU(       a  UnOUnOU(       a
  UnXyS-  -   nO	XhS-  -   nUn[        USS 5      nUb  UR                  X5      nU(       a  UnOUnUS:  a+  U(       a  SUR                  -  nSnOSUR                  -  nSnOS=nnU
(       a
  UU-   UU-   4$ UR                  UU-   UU-   5        UR                  U5        UR                  UR                  nnU(       a$  U(       a  UR                  S[        UUXUUS95        UR!                  U5        [        U SS 5      nU(       a  XXEXgXUUX4Ul        U" U5        U?g g g )NfixedEndrk   
fixedStartr   )r2   r4   rY   )visibler   fontNamefontSizer   rr  rn   	_getValuedxdy	setOriginsetTextlineStrokeColorlineStrokeWidthinsertr   rp   _callOutInfo)r?   rv  rn  r|   rq   r#  rr   rs   rt   ru   rz  
labelWidthr,  y0x0rp  r  r   x00y00r  r  r  sCsWalxs                             r@   ru  BarChart._addLabelQ  s   ===$T>>5>>JJ\\F!]]51EB
!]]516B
uZ6H#&&t/SBBC3J,C#I+CC |T:J%((1CC!tEHHBBEHHBBR2r"u,OOBrE2b5)MM$**E,A,ABb!((1T#c"RUW%XYEE%L$06C&*UU#cRT%X"E
& ] rC   c                     [        X#XE5      nUR                  Ul        UR                  Ul        UR                  Ul        UR                  (       a  UR                  Ul        UR                  U5        g r   )r   r4   r3   r2   r5   rp   )	r?   r|   rr   rs   rt   ru   rq   rx   rs	            r@   _makeBarBarChart._makeBar  sU    u%))oo))   % 5 5A	arC   c                 	   U R                   n[        U SS 5      nU R                  nU R                  nU R                  n0 nU(       aU  / n	[        U R                  5      S-
  n
[        U5       H,  u  p[        U5       H  u  nu  pnnS UU4;  d  M  SX'   M     M.     / R                  n/ R                  n[        U5       GH  u  p[        U5      nUU-  nUU   nUR                  USS5      n/ R                  n[        U5       GH5  u  nu  pnnUU4U;   =(       a    UUU4   =(       d    UnS UU4;   a  U(       a  X;   a  U R                  X+XUUU5        OU(       a  UW	;  a  U R                  X+XUUUSU5	      nU(       aS  UW
   U   u  pnnU R                  X*XUUUSU5	      nUS   US   -   S-  nUS   US   -   S-  nU R                  X*XUSSUS	9  U	R                  U5        U(       a  U" S 5        M  S n[        US
5      (       a!  [        R                  " UR                  5      nO1[        U R                   S
5      (       a  U R                   R                  n[        USS 5      nU(       ap  U(       a5  US:  a  [        UR                   * U5      nOK[#        UR                   U5      nO4US:  a  [        UR                   * U5      nO[#        UR                   U5      nU(       a~  U(       d  UU-   nUUS-  -   nOUU-   nUUS-  -   nU" U5        U" U5        U(       aD  [%        ['        UU5      UUUR(                  =(       d    UR*                  5      n U (       a  U" U 5        OU(       a.  UUl        UUl        UUl        UUl        UR5                  U5        O[7        U5      S:  a{  [7        U5      S:  al  UR*                  c  UR(                  bR  U R9                  XUUUUU5        U(       a5  U" UR:                  S   U R=                  X5      U R                  U   U   XS9  U R?                  X+XUUU5        GM8     [A        URB                  5       HO  nU(       d  M  U" [E        UUR(                  =(       d    UR*                  URF                  URH                  S95        MQ     GM     URB                   H  n!UR5                  U!5        M     URB                   H  n UR5                  U 5        M     g )Nrc   r/   r:   FTr   rk   g-C6?)r|  r6   r9   r<   gHz>r   )rn  rq  rq   r#  rl   )%rS   rn   rB  r   re   rm   rV   r   r   r   r}  ro   r{  deepcopyr6   minr9   r   r   r   r2   r3   rr   rs   rt   ru   rp   absr  r  re  rw  r   __self__r   r4   r5   )"r?   r|   lgrS   brBPr,  catNALcatNNACBLrowNoLrq   r.  r#  rr   rs   rt   ru   r   lineSyms
styleCountrw   rowStyler:   linePtsrx   r0r1r6   r9   yLxLsympls"                                     r@   	_makeBarsBarChart._makeBars  s   yyT+d+%%C^a'F'm
4=cN0E0A%E&>1() 5C ,
 		99#B-JETJz)HH~H^^E8U;FiiG-6s^))E&!%(D0KT8E:J5KWxE&>)!U_++BUQuVLE$4!00%!E&QUV\]24V*U2C/A%!%!4!4RuqvVZ[a!bB!#Ar!uc 1A!#Ar!uc 1A //%!F6U[/\

5)wt} 5(++!]]5<<8FTYY11!YY--F z$7 7$'$>E$'u$=E!!8%(%..%@F%(%?F!Zs]Y^BKBK,Zu-EbEL]L]Lpafapapq FH FH#(FL$*FMEE&MZ_Vd):@[_d_p_p_|MM!afU5A2ajjn43E3Ee3RY]YbYbchYijoYpw|  J!!"51U6B} .<@ +7+;+;<7(7(0(<(<(R@R@R(0(<(<.6.F.FH I =M (Z ..BEE"I !$$CEE#J %rC   c	                    UR                   (       GaG  [        XR                  UR                  5      n	U R                  n
U
(       a  U R                  X&XXU5      u  pnOU R                  X%XgU5      u  pn[        USS 5      nUb!  UR                  X5      nXnnU
(       a  UnOUnOU
(       a
  UnXhS-  -   nO	XWS-  -   nUn[        USS 5      nUb  UR                  X5      nU
(       a  UnOUnUS:  a+  U
(       a  SUR                  -  nSnOSUR                  -  nSnOS=nnUR                  UU-   UU-   5        UR                  U5        XR                  5       4$ g )Nr  rk   r  r   r  )r  r   r  r  r   rr  rn   r  r  r  r  r  	getBounds)r?   rv  rn  rq   r#  rr   rs   rt   ru   r  r,  r  r  rp  r  r   r  r  r  r  r  s                        r@   _computeLabelPositionBarChart._computeLabelPosition  sR   ===$T>>5>>JJ\\F!]]51EB
!]]516B
uZ6H#&&t/SBBC3J,C#I+CC |T:J%((1CC!tEHHBBEHHBBROOBrE2b5)MM$oo'''S rC   c                    U R                   U R                  p!U(       a  Xl        U(       a  X!l        U R                  (       aL  UR	                  U R                  U R                  U R                  5      U R                  U R                  5        OKUR	                  U R                  U R                  U R                  U R                  5      U R                  5        UR                  U R                  5        U R                  5         g)zRInformation function, can be called by charts which want to with space around barsN)rU   rT   joinAxisr   r   r   rr   rt   rs   ru   r   r   r   r?   r  r   s      r@   _computeBarPositionsBarChart._computeBarPositions  s    ""DNNBR{R{<<NN4??466$**=tvvt{{SNN4664??466$++#F

S
T(()rC   c                 4   U R                   nU R                  5         [        U R                  5      nU R                  n/ nUR
                  nU(       a  U R                  nXR                  -   n	U R                  U R                  -   n
U HQ  nU HH  u  ppX-   nX-   nU" [        UU5      [        UU5      [        UU5      U-
  U	[        UU5      -
  45        MJ     MS     OU R                  nXR                  -   n	U R                  U R                  -   n
U HQ  nU HH  u  ppX-   nX-   nU" [        UU5      [        UU5      [        UU5      U-
  U	[        UU5      -
  45        MJ     MS     UR                  5         US   /nU H|  nUS   nUS   US   :  aW  US   US   :  aK  [        US   US   5      [        US   US   5      [        US   US   5      [        US   US   5      4US'   Mk  UR                  U5        M~     UnSnSn[        U5      n[        U5       H  u  nnUS   nUU-   nUU
:  a    UU4$ UnS=nnUU:  aI  UU   S   U::  a=  [        UU   S   U5      n[        UU   S   U5      nUS-  nUU:  a  UU   S   U::  a  M=  UU:  aA  UU:  a9  UnU=(       a    UUUU-   UU-   S4=(       d    UUUU-   UU-   S4nUU:  a    UU4$ M  M  UU:  d  M  UnU=(       a    U	U-
  UU	UU-   S4=(       d    UU	U-
  UU-   U	S4nUU:  d  M    UU4$    UU4$ )	aC  helper for madmen who want to put stuff inside their barcharts
basically after _computebarPositions we slide a line of length size
down the bar profile on either side of the bars to find the
maximum space. If the space at any point is >= required then we're
done. Otherwise we return the largest space location and amount.
r   r   r/   r   r   i  Ni)r   r  rm   rV   rB  r   rr   rt   rs   ru   r  r   r  r   )r?   sizerequiredr,  lenDatar  CaCri   rl  endbprr   rs   whr   r  r   r   r  maxSmaxPnCr   civ0v1r   aloahis                                  r@   _computeMaxSpaceBarChart._computeMaxSpace+  so    !!#dii.XXBjjB&&$C"$JA!AAAaQq3q8b="s1Qx-HI #%  Bkk!B&&#C"$JA!AAAa#a(C!HrM2Aa=IJ #% 
 	
qTFA"AtAaDyQqT!A$YQqT!A$AaD1s1Q4!~c!A$qQRtnU"  VaLDAbABDB#vu  Tz A""C#B$1Q47B;!A$q'#&!A$q'#&Q B$1Q47B; 3wt8D!>r"RVBtGA&>Z2bDQSTWQWXYBZDx'
 Tz (  T:2c6"R4":Vr"S&DQSTU>V8#UTz' !& TzrC   c                    U R                   U R                  p!U(       a  Xl        U(       a  X!l        U R                  (       aL  UR	                  U R                  U R                  U R                  5      U R                  U R                  5        OKUR	                  U R                  U R                  U R                  U R                  5      U R                  5        UR                  U R                  5        U R                  5         U R                  n/ R                  nU R                  n[!        U5       GH.  u  pg/ R                  n[!        U5       H  u  n	u  ppSX4;   a  U R"                  nU(       a  UR$                  (       ar  [&        R&                  " U5      nU R                  R(                  S:*  =(       a    S=(       d    SnUc  UnUc  UnU" U R+                  UR$                  XXXU5      5        M  U" S5        M  U R-                  Xi5      nU(       a+  U" U R+                  UU R.                  Xi4   XiXX5      5        M  U" S5        M     U" UR0                  5        GM1     UR0                  $ )zLInformation function, can be called by charts which want to mess with labelsNr   r!  r"  )rU   rT   r  r   r   r   rr   rt   rs   ru   r   r   r   rS   r   rB  r   r\   rv  r{  r   r  re  rW   r  )r?   r  r   rS   r   r  rq   r.  r  r#  rr   rs   rt   ru   r|  r   rv  s                    r@   _computeSimpleBarLabelPositions(BarChart._computeSimpleBarLabelPositionsk  s   ""DNNBR{R{<<NN4??466$**=tvvt{{SNN4664??466$++#F

S
T(()yyII#B-JE		A09#,,eE>)Bbgg!YYr] NN44a7AEIT =!%!>A6$44RWWbST]cde$--e:D$44T4>>5.;Y[`ijot}~$! 1?" ajjM' (( zzrC   c                 r    [        5       n[        5       nU R                  X5        UR                  U5        U$ r   )r   r  rp   )r?   r|   r  s      r@   r  BarChart.makeBars  s,    GWq	b	rC   c                 *   U R                   R                  nU R                  n[        U5      n[	        [        [        [        U5      5      5      nUS:X  a"  US-
  U R                  -  X0R                  -  -   nOU R                  nX@R                  U-   -  $ )z:for dynamically computing the desired category axis lengthr   r/   )
rU   rx   rV   rm   r   r   r   rR   rP   rQ   )r?   rx   rV   r   mr-  s         r@   _desiredCategoryAxisLength#BarChart._desiredCategoryAxisLength  s|    !!''yyIST]#$*A#t.q>JJ##J.//rC   c                    U R                   U R                  p!U(       a  Xl        U(       a  X!l        U R                  (       a[  UR	                  U R                  U R                  U R                  5      U R                  U R                  5        U R                  5       $ UR	                  U R                  U R                  U R                  U R                  5      U R                  5        U R                  5       $ r   )rU   rT   r  r   r   r   rr   rt   rs   ru   r  r  s      r@   drawBarChart.draw  s    ""DNNBR{R{<<NN4??466$**=tvvt{{S !! NN4664??466$++#F

S!!rC   )rB  r?  r   r7  r9  r;  r<  r=  r5  r4  r   rZ   rX   rW   rR   rP   rS   rU   re   rV   rQ   r\   r[   rO   rT   rd   rJ   r   )FN)F)+rD   rE   rF   rG   __doc__r   r&   r   r   r
   r   r   r%   r   r   r	   r   rH   r}   r   rA   r   r   r   r   r   r  r   re  rr  rw  r}  ru  r  r  r  r  r  r  r  r  r  rI   rJ   rC   r@   rL   rL   4   s   . 
H 
"8Yx(@S7T,U#V  ^S  bc  d
/PQ
 $H3RS
 "(1QR	

 D'GH
 !,GH
 $D/MN
 D'XY
 !,OP
 &d  2N  O
 't  3V  ef  g
 %T0yz
 (	8fuvw
 7>\klm
 #4.lm
   ,H;z{!
" !-U76&-IP~ #
$ !,x  IJ  K%
& '~ = '
8 ''?Fo~  A9
: #:jqPQUV.W`aijno#p  rW  X;
H@!MF=;$z4#8B	`FP} ~(:g
h2'hcJ*(X
 >@#J
0"rC   rL   c                       \ rS rSrSrSrSrg)VerticalBarCharti  z3Vertical bar chart with multiple side-by-side bars.r   rJ   NrD   rE   rF   rG   r  r   rI   rJ   rC   r@   r  r    s
    9GrC   r  c                       \ rS rSrSrSrSrg)HorizontalBarCharti  z5Horizontal bar chart with multiple side-by-side bars.r/   rJ   Nr  rJ   rC   r@   r  r    s
    ;GrC   r  c                   0    \ rS rSrSS jrS rS rS rSrg)	
_FakeGroupi  Nc                 H    / U l         [        R                  " U5      U l        g r   )r   	functools
cmp_to_key_key)r?   r)   s     r@   rA   _FakeGroup.__init__  s    
((-	rC   c                 :    U R                   R                  U5        g r   )r   r   )r?   whats     r@   rp   _FakeGroup.add  s    

$rC   c                     U R                   $ r   )r   r>   s    r@   rq  _FakeGroup.value  s    zzrC   c                 J    U R                   R                  U R                  S9  g )N)key)r   r  r  r>   s    r@   r  _FakeGroup.sort  s    

DII&rC   )r   r  r   )	rD   rE   rF   rG   rA   rp   rq  r  rI   rJ   rC   r@   r  r    s    . 'rC   r  c                   ~    \ rS rSr\" \\" \SS9\" \SS9\" \SS9\" \SS9S9rSr	Sr
S	rS	rS
 rS rS rS rS rSrg	)r   i  zdx/dzr-   zdy/dzzdepth of an individual serieszz gap around series)rN   theta_xtheta_yzDepthzSpacer<   Nc                 ~   [         R                  U 5        U R                  nU R                  nUc  U R                  nU R
                  nUc  U R                  nU R                  R                  S:X  a  X-  US-   U-  -   nOUSU-  -   nX@R                  -  nU R                  U-  U l        U R                  U-  U l        g )Nr   r/   r   )rL   r   r4  r  rP   r  rR   rU   rx   r9  r  _3d_dxr  _3d_dy)r?   rC  r  r  	_3d_depths        r@   r   BarChart3D.calcBarPositions  s    !!$'''>DMM6>DOO6""M1#*KM6+AAI6)I%%%	ll9,ll9,rC   c                     U R                   nUc  U R                  nU R                  nUc  U R                  nU R                  R
                  S:X  a  U R                  XU-   -  U-   -  nU$ U R                  U-  nU$ )Nr   )r  rP   r  rR   rU   rx   r9  )r?   rq   r  r  z0s        r@   _calc_z0BarChart3D._calc_z0  s|    >DMM6>DOO6""M1!!5-#8#?@B 	 !!&(B	rC   c                 r   U R                   nUc  U R                  nU R                  n	U	c  U R                  n	U R	                  U5      n
XU R
                  -  -   nUS:  a  X$-  nU* nX*U R                  -  -  nX:U R                  -  -  nU R                  (       a  X9-  nOX)-  nUR                  SXX#XEXg4	5        g )Nr   )
r  rP   r  rR   r  r9  r  r  r   rp   )r?   r|   rr   rs   rt   ru   rq   rx   r  r  r  z1s               r@   r  BarChart3D._makeBar  s    >DMM6>DOO6]]5!))))7JAFE	_	_<<KAKA	qq545rC   c                    U R                  U5      nU R                  n	U	c  U R                  n	Un
XHU R                  -  -  nXXU R                  -  -  nU R
                  (       a  XY-  nOXI-  nUR                  SXXEXgX#4	5        g )Nr/   )r  r  rR   r  r  r   rp   )r?   r|   rq   r#  rr   rs   rt   ru   r  r  r  s              r@   rw  BarChart3D._addBarLabel  sw    ]]5!>DOO6	_	_<<KAKA	qq545rC   c                    SSK Jn  [        U R                  S9nU R	                  X"5        UR                  5         [        5       nU R                  nU R                  nUR                  5       nU R                  R                  nUS:X  a  UR                  5         O*US:X  a$  [        S U 5       5       Vs/ s H  oS   PM	     nnU HU  n	U	S   S:X  d  M  U	SS  u  pppnnX-
  nU" X<X-   XU-   UU-  UU-  UR                  S UR                  UR                   SS	9  MW     U H/  n	U	S:X  d  M  U	SS  u  pppnn["        R%                  XUUXX5        M1     U$ s  snf )
Nr   )_draw_3d_barr(   r   r   c              3   H   #    U  H  oS    US   US   US   4U4v   M     g7f)r/   r   r   r   NrJ   )r   ts     r@   r   &BarChart3D.makeBars.<locals>.<genexpr>  s.     -ZQYA!QqT!A$qt/DQ.GQYs    "r/   g?)r3   fillColorShadedr2   r4   shading)!reportlab.graphics.charts.utils3dr  r  _cmpZr  r  r   r  r  rq  rU   rx   reverser   r3   r2   r4   rL   rw  )r?   r  fgr|   r  r  fg_valuer   r  r  r  r  rr   rs   rt   ru   rq   rx   dzr#  s                       r@   r  BarChart3D.makeBars  sX   BDJJ'r
	G,,,,88:##))Ig&,-ZQY-Z&[\&[!&[H\AtQw56qrU2a%uUWQ17AxGRZ&+oot(-(9(9uGXGX$(*	  A!t56qrU2a%uU%%dU5UJ   ]s   4E)r  r  )rD   rE   rF   rG   r   rL   r   r   rH   r  r  r  r  r   r  r  rw  r  rI   rJ   rC   r@   r   r     sg    Hxg6xg6h-LMh-BC	
H GGFF-	6$6rC   r   c                       \ rS rSrS rSrg)VerticalBarChart3Di%  c                 b    [        US   * US   US   US   * 4US   * US   US   US   * 45      $ )Nr/   r   r   r   r(   r?   r  r   s      r@   <lambda>VerticalBarChart3D.<lambda>&  sE    #!uQqT!A$!u5!uQqT!A$!u6MNrC   rJ   NrD   rE   rF   rG   r  rI   rJ   rC   r@   r  r  %  s    
NErC   r  c                       \ rS rSrS rSrg)HorizontalBarChart3Di(  c                 b    [        US   * US   US   US   * 4US   * US   US   US   * 45      $ )Nr/   r   r   r   r(   r  s      r@   r  HorizontalBarChart3D.<lambda>)  sE    S1Q4%!QqT1Q4%!81Q4%!QqT1Q4%9PQrC   rJ   Nr  rJ   rC   r@   r  r  (  s    QErC   r  c                  ,   [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SS/UR                  l        U R+                  U5        U $ )z9A slightly pathologic bar chart with only TWO data items.  r         2   }   ,  r   <      ne   r     YingYangr   r  rr   rs   ru   rt   rV   r   r   r2   rT   valueMinvalueMax	valueSteprU   r@  r   r  r  anglecategoryNamesrp   r   rV   r   s      r@   	sampleV0ar4  ,  s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'+BOO$ !BOO "BOO#%BOO %+V$4BOO!KKONrC   c                  *   [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        SUR                  l        S	UR                  R                  l        S
UR                  R                  l        SUR                  R                  l        SUR                  R                  l        S/UR                  l        U R+                  U5        U $ )z/A pathologic bar chart with only ONE data item.r  r   *   r#  r$  r%  r   r'  r(  r)  r  r*  Jan-99r-  r3  s      r@   	sampleV0br9  K  s     c3G7D		BBDBDBIBHG\\BNBLLBLLBLL'+BOO$ !BOO "BOO#%BOO %-JBOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        SUR                  R                  l        / UR                  l        U R)                  U5        U $ )z8A really pathologic bar chart with NO data items at all!r  r   rJ   r#  r$  r%  r   r&  r'  r(  r)  r  )r   r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r  r  r2  rp   r3  s      r@   	sampleV0cr;  i  s     c3G4D		BBDBDBIBHG\\BNBLLBLLBLL'+BOO$ !BOO "BOO$&BOO!KKONrC   c                  |   [        SS5      n SS/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        S	UR                  l        S
UR                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SR)                  S5      nU Vs/ s H  oDS-   PM	     nnX2R                  l        U R-                  U5        U $ s  snf )!Sample of multi-series bar chart.r  r   r!  r   r"     %   -      r      r         &   .   r"  r   r#  r$  r%  r   r&  r'  r(  r)  r  r*  Jan Feb Mar Apr May Jun Jul Aug -99)r   r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r  r  r1  r  r2  rp   r   rV   r   catNamesr   s        r@   sampleV1rN    s    c3G +*D
 
	BBDBDBIBHG\\BNBLLBLLBLL'+BOO$ !BOO "BOO#%BOO 066s;H!)*A%H*$,OO!KKON	 +s   D9c                     SS/n Sn[        SS5      n[        5       nSUl        SUl        SUl        SUl        Xl        S	Ul        S
Ul        S
Ul	        SUR                  l        SUR                  l        SUR                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        XR&                  l        SUR&                  R                  l        SUR&                  R                  l        SUR&                  R                  l        UR-                  U5        U$ )r=  333333@r   r   gffffff"@333333?皙r   g333333@zQ3 2000zYear to Datez	12 monthszAnnualised
3 yearszSince 07.10.99r  r   r#  r   r%  r   r   r'  r   	Helveticar)  r   r   r   r  rr   rs   ru   rt   rV   rR   rQ   rP   rT   r.  r/  r0  r@  r  r  r   r   rU   r2  r  rp   rV   r@  r   r   s       r@   	sampleV2ar]         ##D7F c3G		BBDBDBIBHGBMBOBKBLLBLLBLL#.BLL #$BLL $'BLL!%-BLL"$*OO!&1BOO#&'BOO# #BOOKKONrC   c                     SS/n Sn[        SS5      n[        5       nSUl        SUl        SUl        SUl        Xl        S	Ul        S
Ul        S
Ul	        SUR                  l        SUR                  l        S	UR                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        XR&                  l        SUR&                  R                  l        SUR&                  R                  l        SUR&                  R                  l        UR-                  U5        U$ )r=  rP  rS  rW  r  r   r#  r   r%  r   r   rX  r'  rY  r)  r   r   rZ  r[  r\  s       r@   	sampleV2br`    r^  rC   c                     SS/n Sn[        SS5      n[        5       nSUl        SUl        SUl        SUl        Xl        S	Ul        S
Ul        S
Ul	        SUR                  l        SUR                  l        SUR                  l        SUR                  R                  l        SUR                  R                  l        XR"                  l        SUR"                  R                  l        SUR"                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR"                  R                  l        S
UR,                  l        SUl        SUR,                  l        SUR,                  l        SUR,                  l        SUR,                  l        SUR,                  l        UR5                  U5        U$ )r=  rQ  rR  r   r   {G#@rT  rU  rV  r   rc  rW  r  r   r#  r   r%  r   r   rX  r'  r   rY  r)  r   r   rZ  %0.2fr   r   )r   r  rr   rs   ru   rt   rV   rR   rQ   rP   rT   r.  r/  r0  r@  r  r  rU   r2  r   r   r  rW   r   rX   r  rp   r\  s       r@   	sampleV2crf    sn    $$D7F c3G		BBDBDBIBHGBMBOBKBLLBLLBLL#.BLL #$BLL $*OO!&1BOO#&'BOO#$'BLL!%-BLL" #BOOBLLBBLLOBLLO BLL'BLLBLLKKONrC   c                     Sn SnSn[        U 5      [        U5      :X  d   S5       e[        U 5      [        U5      :X  d   S5       e[        SS5      n[        5       nSUl        SUl        SUl        S	Ul        U4Ul        [        R                  UR                  l        S
Ul        SUR                  l        SUR                  l        SUR                  l        SUR                  l        SUR                  l        SUR                  l        SUR                  l        SUR*                  l        SUR*                  l        SUR*                  l        SUR*                  l        SUR4                  l        SUR4                  l        XR4                  l        SUR4                  R<                  l        SUR4                  R<                  l        SUR4                  R<                  l        SUR4                  R<                  l        SUR4                  R<                  l        SUR4                  R<                  l        [?        U5      nURA                  SS5        URC                  S5        URE                  U5        U$ )zBFaked horizontal bar chart using a vertical real one (deprecated).
zUK EquitieszUS EquitieszEuropean EquitieszJapanese EquitieszPacific (ex Japan) EquitieszEmerging Markets EquitieszUK BondszOverseas BondszUK Index-LinkedCash
g      333333?r<   r  g?gffffff?g?g?r  rk  
g        Q?g?皙?g)\(?gp=
ף?g)\(?g)\(?rn  rm  bad datar  r   r   r      re  r  r   rY  r   r   r  r   r/   i   i)#rm   r   r  rr   rs   ru   rt   rV   r   r   rS   r3   rX   rW   r  r  r   r1  r  r  r   rT   r  r.  r/  r0  rU   tickUptickDownr2  r@  r   	translaterotaterp   namesseries1series2r   r   r|   s         r@   sampleV3rz  -  s   GE BGHGu:W%1z1%u:W%1z1%c3G		BBDBDBIBHjBGBGGBBLLOBLLO BLLBLL'BLLBLLBLLBLLBLLBLLBLLBOO BOO$)OO!#%BOO '*BOO$ !BOO $BOO&1BOO#&'BOO#b	AKKSHHSMKKNNrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        SS/UR                  l        U R'                  U5        U $ )AA bar chart showing value axis region starting at *exactly* zero.r  r   r   r#  r$  r%  r   r&  r'  r   r+  r,  r   r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r  r2  rp   r3  s      r@   	sampleV4ar  e  s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        SS/UR                  l        U R'                  U5        U $ )<A bar chart showing value axis region starting *below* zero.r  r   r   r#  r$  r%  r&  r'  r   r}  r+  r,  r~  r3  s      r@   	sampleV4br    s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        SS/UR                  l        U R'                  U5        U $ )z;A bar chart showing value axis region staring *above* zero.r  r   r   r#  r$  r%  r   r&  r'  r   r}  r+  r,  r~  r3  s      r@   	sampleV4cr    s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        SS/UR                  l        U R'                  U5        U $ )<A bar chart showing value axis region entirely *below* zero.r  r   iir#  r$  r%  r  r'  r   r}  r+  r,  r~  r3  s      r@   	sampleV4dr    s     c3G<D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   ))r   r&  )r"  r#  )r*  (   )r  r*  c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUR                  l        SUR                  l        SUR                  l        S	UR                  R                   l        S
UR                  R                   l        SS/UR                  l        U R)                  U5        U $ )8A simple bar chart with no expressed spacing attributes.r  r   r#  r$  r%  r   r&  r'  r   r}  r+  r,  )r   dataSample5r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r  r2  rp   r3  s      r@   	sampleV5ar    s     c3GD		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        S	Ul        SUR                  l        S
UR                  l        SUR                  l        SUR&                  R(                  l        SUR&                  R(                  l        SS/UR&                  l        U R1                  U5        U $ )-A simple bar chart with proportional spacing.r  r   r#  r$  r%  r   r  r"  r   r&  r'  r   r}  r+  r,  r   r  r  rr   rs   ru   rt   rV   r   r   r2   rO   rP   rQ   rR   rT   r.  r/  r0  rU   r@  r   r  r2  rp   r3  s      r@   	sampleV5br         c3GD		BBDBDBIBHG\\BNBNBKBOBMBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        SUl        SUR                  l        S	UR                  l        S
UR                  l        SUR&                  R(                  l        SUR&                  R(                  l        SS/UR&                  l        U R1                  U5        U $ )6Make sampe simple bar chart but with absolute spacing.r  r   r#  r$  r%  r/   r  r   r&  r'  r   r}  r+  r,  r  r3  s      r@   
sampleV5c1r    s     c3GD		BBDBDBIBHG\\BNBNBKBOBMBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        S	Ul        S	UR                  l        S
UR                  l        SUR                  l        SUR&                  R(                  l        SUR&                  R(                  l        SS/UR&                  l        U R1                  U5        U $ )r  r  r   r#  r$  r%  r/   r  r"  r   r&  r'  r   r}  r+  r,  r  r3  s      r@   
sampleV5c2r  =  s     c3GD		BBDBDBIBHG\\BNBNBKBOBMBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        S	Ul        SUR                  l        S
UR                  l        SUR                  l        SUR&                  R(                  l        SUR&                  R(                  l        SS/UR&                  l        U R1                  U5        U $ )r  r  r   r#  r$  r%  r/   r  r   r   r&  r'  r   r}  r+  r,  r  r3  s      r@   
sampleV5c3r  ^  s     c3GD		BBDBDBIBHG\\BNBNBKBOBMBLLBLLBLL'*BOO$ "BOO%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        S	Ul        S
UR                  l        SUR                  l        SUR                  l        SUR&                  R(                  l        SUR&                  R(                  l        SS/UR&                  l        U R1                  U5        U $ )r  r  r   r#  r$  r%  r/   r  r"  r   r   r&  r'  r   r}  r+  r,  r  r3  s      r@   
sampleV5c4r    r  rC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        SS/UR                  l        U R'                  U5        U $ )z>Make a slightly pathologic bar chart with only TWO data items.r  r   r   r#  r$  r%  r   r&  r'  ser*  r+  r,  r   r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r1  r2  rp   r3  s      r@   	sampleH0ar    s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'+BOO$#%BOO %+V$4BOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        SUR                  l        S	UR                  R                  l        S
UR                  R                  l        S/UR                  l        U R'                  U5        U $ )z4Make a pathologic bar chart with only ONE data item.r  r   r6  r#  r$  r%  r   r'  r  r*  r8  r  r3  s      r@   	sampleH0br    s     c3G7D		BBDBDBIBHG\\BNBLLBLLBLL'+BOO$#%BOO %-JBOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SUR                  R                  l        / UR                  l        U R'                  U5        U $ )z=Make a really pathologic bar chart with NO data items at all!r  r   rJ   r#  r$  r%  r   r&  r'  r  r*  r  r3  s      r@   	sampleH0cr    s     c3G4D		BBDBDBIBHG\\BNBLLBLLBLL'+BOO$#%BOO $&BOO!KKONrC   c                     [        SS5      n SS/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        S	UR                  l        S
UR                  l        SUR                  R                  l        SR#                  S5      nU Vs/ s H  oDS-   PM	     nnX2R                  l        U R'                  US5        U $ s  snf )r=  r  r   r>  rC  r#  r$  r%  r   r&  r'  erI  rJ  rK  barchart)r   r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r  r2  rp   rL  s        r@   sampleH1r    s     c3G +*D
 
	BBDBDBIBHG\\BNBLLBLLBLL'*BOO$066s;H!)*A%H*$,OO!KKJN	 +s   5C)c                     SS/n Sn[        SS5      n[        5       nSUl        SUl        SUl        S	Ul        Xl        S
Ul        SUl        SUl	        SUR                  l        SUR                  l        SUR                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        UR                  R'                  UR                  5        XR(                  l        SUR(                  R                  l        SUR(                  R                  l        SUR(                  R                  l        UR/                  U5        U$ )r=  rP  rS  rW  r  r   r   r#  r   r%  r   r   rX  r'  r   rY  r)  r   r   j)r   r  rr   rs   ru   rt   rV   rR   rQ   rP   rT   r.  r/  r0  r@  r  r  r   r   r   rU   r2  r  rp   r\  s       r@   	sampleH2ar    s6    ##D7F c3G		BBDBDBIBHGBMBOBKBLLBLLBLL#.BLL #$BLL $'BLL!%-BLL"LL277#$*OO!&1BOO#&'BOO# $BOOKKONrC   c                     SS/n Sn[        SS5      n[        5       nSUl        SUl        SUl        S	Ul        Xl        S
Ul        SUl        SUl	        SUR                  l        SUR                  l        S
UR                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        XR&                  l        SUR&                  R                  l        SUR&                  R                  l        SUR&                  R                  l        UR-                  U5        U$ )r=  rP  rS  rW  r  r   r   r#  r   r%  r   r   rX  r'  rY  r)  r   r   r  )r   r  rr   rs   ru   rt   rV   rR   rQ   rP   rT   r.  r/  r0  r@  r  r  r   r   rU   r2  r  rp   r\  s       r@   	sampleH2br  @  s     ##D7F c3G		BBDBDBIBHGBMBOBKBLLBLLBLL#.BLL #$BLL $'BLL!%-BLL"$*OO!&1BOO#&'BOO# $BOOKKONrC   c                     SS/n Sn[        SS5      n[        5       nSUl        SUl        SUl        S	Ul        Xl        S
Ul        SUl        SUl	        SUR                  l        SUR                  l        SUR                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        SUR                  R                  l        XR&                  l        SUR&                  R                  l        SUR&                  R                  l        SUR&                  R                  l        SUR,                  l        SUl        SUR,                  l        SUR,                  l        SUR,                  l        SUR,                  l        SUR,                  l        UR5                  U5        U$ )r=  rb  rd  rW  r  r   r   r#  r   r%  r   r   rX  r'  r   rY  r)  r   r   r  re  r   r   )r   r  rr   rs   ru   rt   rV   rR   rQ   rP   rT   r.  r/  r0  r@  r  r  r   r   rU   r2  r  rW   r   rX   r  rp   r\  s       r@   	sampleH2cr  i  sn    $$D7F c3G		BBDBDBIBHGBMBOBKBLLBLLBLL#.BLL #$BLL $'BLL!%-BLL"$*OO!&1BOO#&'BOO# $BOOBLLBBLLOBLLO BLL'BLLBLLKKONrC   c                     Sn SnSn[        U 5      [        U5      :X  d   S5       e[        U 5      [        U5      :X  d   S5       e[        SS5      n[        5       nSUl        SUl        S	Ul        S
Ul        U4Ul        [        R                  UR                  l        SUl        SUR                  l        SUR                  l        SUR                  l        SUR                  l        SUR                  l        SUR                  l        SUR(                  l        SUR(                  l        SUR(                  l        SUR(                  l        SUR2                  l        SUR2                  l        XR2                  l        SUR2                  R:                  l        SUR2                  R:                  l        SUR2                  R:                  l        SUR2                  R:                  l        [=        U5      nUR?                  U5        U$ )zEA really horizontal bar chart (compared to the equivalent faked one).rh  rj  rl  ro  r  r   r   r"  rp     re  r   r  rY  r   r   r  r   r/   iV) rm   r   r  rr   rs   ru   rt   rV   r   r   rS   r3   rX   rW   r  r  r   r  r  r   rT   r  r.  r/  r0  rU   tickLeft	tickRightr2  r@  r   rp   rv  s         r@   sampleH3r    s   GE BGHGu:W%1z1%u:W%1z1%c3G		BBDBDBIBHjBGBGGBBLLOBLLO BLL'BLLBLLBLLBLLBLLBLLBLL BOO !BOO$)OO!'*BOO$ $BOO&1BOO#&'BOO#b	AKKNNrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SS/UR                  l        U R%                  U5        U $ )r|  r  r   r   r#  r$  r%  r   r&  r'  r  r+  r,  r   r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r2  rp   r3  s      r@   	sampleH4ar    s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SS/UR                  l        U R%                  U5        U $ )r  r  r   r   r#  r$  r%  r  r&  r'  r  r+  r,  r  r3  s      r@   	sampleH4br    s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SS/UR                  l        U R%                  U5        U $ )z<A bar chart showing value axis region starting *above* zero.r  r   r   r#  r$  r%  r   r&  r'  r  r+  r,  r  r3  s      r@   	sampleH4cr    s     c3G:D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n S/n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul	        SUR                  l        SUR                  l        S	UR                  l        S
UR                  R                  l        SS/UR                  l        U R%                  U5        U $ )r  r  r   r  r#  r$  r%  r  r  r'  r  r+  r,  r  r3  s      r@   	sampleH4dr  !  s     c3G<D		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUR                  l        SUR                  l        SUR                  l        S	UR                  R                   l        S
S/UR                  l        U R'                  U5        U $ )r  r  r   r#  r$  r%  r   r&  r'  r  r+  r,  )r   r  r  rr   rs   ru   rt   rV   r   r   r2   rT   r.  r/  r0  rU   r@  r   r2  rp   r3  s      r@   	sampleH5ar  ?  s     c3GD		BBDBDBIBHG\\BNBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        S	Ul        SUR                  l        S
UR                  l        SUR                  l        SUR&                  R(                  l        SS/UR&                  l        U R/                  U5        U $ )r  r  r   r#  r$  r%  r   r  r"  r   r&  r'  r  r+  r,  r   r  r  rr   rs   ru   rt   rV   r   r   r2   rO   rP   rQ   rR   rT   r.  r/  r0  rU   r@  r   r2  rp   r3  s      r@   	sampleH5br  Z       c3GD		BBDBDBIBHG\\BNBNBKBOBMBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        SUl        SUR                  l        S	UR                  l        S
UR                  l        SUR&                  R(                  l        SS/UR&                  l        U R/                  U5        U $ )z)A simple bar chart with absolute spacing.r  r   r#  r$  r%  r/   r   r   r&  r'  r  r+  r,  r  r3  s      r@   
sampleH5c1r  z       c3GD		BBDBDBIBHG\\BNBNBKBOBMBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        S	Ul        S	UR                  l        S
UR                  l        SUR                  l        SUR&                  R(                  l        SS/UR&                  l        U R/                  U5        U $ 'Simple bar chart with absolute spacing.r  r   r#  r$  r%  r/   r   r"  r   r&  r'  r  r+  r,  r  r3  s      r@   
sampleH5c2r    s     c3GD		BBDBDBIBHG\\BNBNBKBOBMBLLBLLBLL'*BOO$%+V$4BOO!KKONrC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        S	Ul        S
Ul        S	UR                  l        SUR                  l        SUR                  l        SUR&                  R(                  l        SS/UR&                  l        U R/                  U5        U $ )r  r  r   r#  r"     r%  r/   r   r   r   r&  r'  r  r+  r,  r  r3  s      r@   
sampleH5c3r    r  rC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        SUl        S	UR                  l        S
UR                  l        SUR                  l        SUR&                  R(                  l        SS/UR&                  l        U R/                  U5        U $ r  r  r3  s      r@   
sampleH5c4r    r  rC   c                     [        SS5      n [        n[        5       nSUl        SUl        SUl        SUl        Xl        [        R                  Ul
        SUl        SUl        SUl        S	UR                  l        S
UR                  l        SUR                  l        SUR$                  R&                  l        SS/UR$                  l        S	SKJn  U" 5       n[        R                  Ul        [        R2                  Ul        SUl        S	Ul        U" 5       n[        R                  Ul        [        R:                  Ul        SUl        S	Ul        U" 5       n[        R2                  Ul        [        R<                  Ul        SUl        SUl        S	Ul        XBR@                  l!        XRR@                  S   l!        XbR@                  S   l!        U RE                  U5        U $ )(Simple bar chart using symbol attribute.r  r   r#  r$  r%  r   r'  r   r   r&  r  r+  r,  
ShadedRect
horizontalverticalr/   r   )#r   r  r  rr   rs   ru   rt   rV   r   r   r2   rP   rQ   rR   rT   r.  r/  r0  rU   r@  r   r2   reportlab.graphics.widgets.gridsr  fillColorStartr=   fillColorEndorientationr4   pinkwhitecylinderModerS   r6   rp   )r   rV   r   r  sym1sym2sym3s          r@   sampleSymbol1r    sr    c3GD		BBDBDBIBHG\\BNBKBOBMBLLBLLBLL'*BOO$%+V$4BOO!;<D ,,DD#DD<D ,,DD#DD<D ++DD!DDDGGNGGAJGGAJKKONrC   c                     [        SS5      n [        n[        5       nSUR                  l        SUl        SUl        SUl        SUl        Xl	        [        R                  Ul        SUl        SUl        S	UR                  l        S
UR                  R"                  l        SS/UR                  l        S	SKJn  U" 5       UR,                  l        [        R0                  UR,                  R.                  l        [        R4                  UR,                  R.                  l        SUR,                  R.                  l        SUR,                  R.                  l        S	UR,                  R.                  l        U" 5       UR,                  S   l        [        R>                  UR,                  S   R.                  l        [        R4                  UR,                  S   R.                  l        SUR,                  S   R.                  l        SUR,                  S   R.                  l        S	UR,                  S   R.                  l        U" 5       UR,                  S   l        [        R@                  UR,                  S   R.                  l        [        R4                  UR,                  S   R.                  l        SUR,                  S   R.                  l        SUR,                  S   R.                  l        S	UR,                  S   R.                  l        U" 5       UR,                  S   l        [        RB                  UR,                  S   R.                  l        [        R4                  UR,                  S   R.                  l        SUR,                  S   R.                  l        SUR,                  S   R.                  l        S	UR,                  S   R.                  l        U RE                  U5        U $ )r  r  r   r   r#  r$  r%  r   r'  r   r  r+  r,  r  r  r/   r   r   )#r   r  r  rU   rx   rr   rs   ru   rt   rV   r   r   r2   rP   rQ   rT   r.  r@  r   r2  r  r  rS   r6   r   r  r  r  r  r  r4   magentar   r=   rp   )r   rV   r   r  s       r@   sampleStacked1r  /	  s    c3GD		B%BOOBDBDBIBHG\\BNBKBOBLL'*BOO$%+V$4BOO!;\BGGN$*JJBGGNN!"(,,BGGNN!+BGGNN"#BGGNN!"BGGNN"BGGAJ'-~~BGGAJ$%+\\BGGAJ"$.BGGAJ!%&BGGAJ"$%BGGAJ!"BGGAJ'-||BGGAJ$%+\\BGGAJ"$.BGGAJ!%&BGGAJ"$%BGGAJ!"BGGAJ'-{{BGGAJ$%+\\BGGAJ"$.BGGAJ!%&BGGAJ"$%BGGAJ!KKONrC   c                   "    \ rS rSrSrSS jrSrg)
SampleH5c4ih	  r  c                     [         R                  " XU/UQ70 UD6  [        5       nSUl        SUl        SUl        SUl        [        Ul        [        R                  Ul        SUl        SUl        SUl        SUl        SUR                   l        SUR                   l        S	UR                   l        S
UR(                  R*                  l        SS/UR(                  l        U R1                  USS9  UR3                  5         g )Nr#  r$  r%  r/   r   r"  r   r&  r'  r  r+  r,  HBC)r7   )r   rA   r  rr   rs   ru   rt   r  rV   r   r   r2   rO   rP   rQ   rR   rT   r.  r/  r0  rU   r@  r   r2  rp   r  )r?   rt   ru   argskwr   s         r@   rA   SampleH5c4.__init__k	  s    F6D626!	 ! "!#+.()/(8%
**,rC   rJ   N)r  r   )rD   rE   rF   rG   r  rA   rI   rJ   rC   r@   r  r  h	  s
    --rC   r  )h__version__r  r{  r  astr   reportlab.libr   reportlab.lib.validatorsr   r   r   r   r	   r
   r   r   r   r   r   r   reportlab.lib.utilsr   r   "reportlab.graphics.widgets.markersr   r   reportlab.lib.attrmapr   r   reportlab.pdfbase.pdfmetricsr   reportlab.graphics.widgetbaser   r   r   reportlab.graphics.shapesr   r   r   r   r   reportlab.graphics.charts.axesr    r!   r"   r#   $reportlab.graphics.charts.textlabelsr$   r%   reportlab.graphics.charts.areasr&   !reportlab.graphics.charts.legendsr'   	reportlabr)   r+   rL   r  r  r  r   r  r  r4  r9  r;  rN  r]  r`  rf  rz  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  r  r  r  rJ   rC   r@   <module>r     s   	    B B B B 7 G 7 4 Y Y J J _ _ X 4 5 $ $*w"x w"rx  ' '` `DO$4 OR:&8 R><: F&R&R/d5p:::B 78BBBBF:88>'T&R/d/d8888 76@@@@>4l6r- -rC   