
    kf                       d Z dZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ dd	lmZmZ dd
lmZ ddl m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7  G d de"          Z8 G d de3          Z9 G d de9          Z: G d de9          Z; G d d          Z< G d de9          Z= G d de=e:          Z> G d  d!e=e;          Z?d" Z@d# ZAd$ ZBd% ZCd& ZDd' ZEd( ZFd) ZGd* ZHd+ ZId, ZJd- ZKg d.ZLd/ ZMd0 ZNd1 ZOd2 ZPd3 ZQd4 ZRd5 ZSd6 ZTd7 ZUd8 ZVd9 ZWd: ZXd; ZYd< ZZd= Z[d> Z\d? Z]d@ Z^g d.ZLdA Z_dB Z`dC ZadD ZbdE ZcdF ZddG ZedH Zf G dI dJe(          ZgdS )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                   *   e Zd Z e eed           eed           eed           eed           eddd	           eed
           e e	e
          dd	           eed           e e	e          d          	  	        Zd ZdS )BarChartPropertiesz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                 `    d | _         t          j        | _        d| _        d | _        d | _        d S )N      ?)r1   r   bluer2   r3   r5   r4   selfs    c/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/graphics/charts/barcharts.py__init__zBarChartProperties.__init__,   s0    #    )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r
   _attrMapr@    rA   r?   r+   r+      s        w"l=7QRRR L5VWWW"l82LMMM&,'<CZ[[[d)Wfghhh|H+]^^^#|FF8$4$4;^mnooo<5_```ffY//6]^^^

 

 

H$ $ $ $ $rA   r+   c                      e Zd ZdZ edOi ded e ee ee	e
f          f          dd          d ee
d	          d
 ee
d	          d ee
d	          d edd	          d edd	          d edd	          d edd	          d edd	          d edd	          d eddd          d edd	          d eed d          d! eed"d          d# edd$	          d% ee
d&	          d' e ed(d)d*          d+	          d, edd-d          d. eed/	          d0 eed1d          d2 e e eed3d3d4          d3dd4          d5          Zd6 ZdPd7Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdQdDZdRdEZdF Z dG Z!dH Z"dI Z#dJ Z$dK Z%dL Z&dM Z'dN Z(dS )SBarChartz(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.   r/   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           
         | j         }|t          |          z  }||         }t          |dt          |dd                     }	t          |dt          |dd                     }
t          |dt          |dd                     }t          |dt          |dd                     }t          |dt          |dd                     }|rt          |||dz  z   ||dz  z   |
          S t          |dd          r||dz  z   }t	          |d	          r|j        }nt	          |d	          r|j        }nd }t          ||||z   ||j        p|j        |j	        |j
        
          }|r$t          |||dz  z   ||j        p|j                  }|r<|r:t                      }|                    |           |                    |           |S |p|S t          ||||||	||
          S )Nr1   r2   r4   r3   r7          @r9   Fr5   r1   r3   r4   )r3   r1   r4   r2   )rN   lengetattrr   hasattrr5   r   r1   r2   r3   r4   r   addr   )r>   rowNoxywidthheight	baseStylestyleIdxstyler1   r2   r4   r3   r7   yh2SLgs                     r?   makeSwatchSamplezBarChart.makeSwatchSampleW   s   I	3y>>)(#e]GImTX4Y4YZZE;	+d0S0STT	!%):GIN_`d<e<effe]GE=QU4V4VWWungiX\6]6]^^ 	M!,qrz!F2I+iPPPU8E** 	MF2I+Cuh'' LH-- $QsAeGS % 1 DU_ % 1&+&;= = =A
 [nQqrz#e6G6Z5?[[! Q GGaa6M!E&[[(7)M M M MrA   c                 T    t          t          | j        |         d|                    S )zreturn series name i or defaultr6   )r'   ri   rN   )r>   idefaults      r?   getSeriesNamezBarChart.getSeriesNamez   s"    wty|F7;;<<<rA   c                    | j         j        dvsJ d| j         j        z              | j        r't                      | _        t                      | _        n&t                      | _        t                      | _        t          dddd          | j        j
        d         _        t          j        |            d| _        d| _        d	d
g| _        d| _        d| _        d| _        d| _        t)          t*                    | _        d| j        _        d| j        _        d | _        d | _        d| j        _        t)          t8                    | _        d| j        _        t>          j         | j        _!        d | j        _"        t>          j#        | j        d         _$        t>          j%        | j        d         _$        t>          j&        | j        d         _$        d x| _'        | _(        d | _)        d S )N)rH   
BarChart3DzAbstract Class %s Instantiatedstackedparallelparallel_3dmixedrs   r   )d   n   x      )F   P   U   Z   
      cmiddler.      )*	__class__rB   _flipXYr"   rP   r#   rO   r    r!   r   rE   validater&   r@   rM   rV   rQ   rJ   rK   rL   r   r$   rR   	boxAnchor
textAnchorrS   rU   nudger+   rN   r3   r   blackr1   r4   redr2   greenr<   rW   r`   r_   r=   s    r?   r@   zBarChart.__init__~   s   ~&.GGGGIilplz  mD  JDGGG< 	* -D'\\DNN -D'\\DN7<YzR_`g7h7h"7+4$ ! '$&	 0??#& $,!"!  ! ,,>??	 !	 &	$(	!!'	!!'	!!'	!.22t+#rA   c                     | j         j        dk    rt          d          t          dd          }|                                  }|                    |           |S )zShows basic use of a bar chartrH   z#Abstract Class BarChart has no demo   r   )r   rB   NotImplementedErrorr   rk   )r>   drawingbcs      r?   demozBarChart.demo   sS    >"J..%&KLLL#s##^^BrA   c                 n  	 t          | dd           }t          | j                  	|sd t          	          D             }n| j        t          t          	                    }t                      }g }|D ]X}	fd|D             }fd|D             }|r||z  }||z  }||z  }|r'|                    t          |                     ||z  }Y|r,|                    d t          |          D                        |r,|                    d t          |          D                        || _
        d S )Nra   c                     g | ]}|fS rF   rF   .0sss     r?   
<listcomp>z+BarChart.getSeriesOrder.<locals>.<listcomp>   s    ***2"***rA   c                 4    h | ]}d |cxk    rk    n n|S )r   rF   )r   r   ns     r?   	<setcomp>z*BarChart.getSeriesOrder.<locals>.<setcomp>   s.    000Bq"xxxxaxxxxxRxxxrA   c                 B    h | ]}                     |d d          |S )r9   F)	checkAttr)r   r   rN   s     r?   r   z*BarChart.getSeriesOrder.<locals>.<setcomp>   s.    JJJRr(5(I(IJbJJJrA   c              3      K   | ]}|fV  d S NrF   r   s     r?   	<genexpr>z*BarChart.getSeriesOrder.<locals>.<genexpr>   s$      882"888888rA   c              3      K   | ]}|fV  d S r   rF   r   s     r?   r   z*BarChart.getSeriesOrder.<locals>.<genexpr>   s$      772"777777rA   )ri   rh   rQ   rangerN   setappendtupleextendsorted_seriesOrder)
r>   bsRunseenlinessrw   glrN   r   s
           @@r?   getSeriesOrderzBarChart.getSeriesOrder   se   T---	NN 	8**q***AA9Dq]]FEEEA 	  	 0000!000JJJJ1JJJ !GARKEbLF  HHU1XX&&&aKF 988888888 877777777rA   c                 ,   | j         j        }| j        t          t	          t          t                                        }|dvrBg fd}|dk    r |  n/|                                  | j        D ]} |fd|D               | _	        d S )Nr   r   c                  4   t          d | D                       dgz  }|d d          }| D ]B}t          |          D ]0\  }}|pd}|dk    r||xx         |z  cc<    ||xx         |z  cc<   1C                    |                               |           d S )Nc              3   4   K   | ]}t          |          V  d S r   )rh   )r   ds     r?   r   zBBarChart._getConfigureData.<locals>._accumulate.<locals>.<genexpr>   s(      //SVV//////rA   r   ư)max	enumerater   )Dpdatandatar   rz   vrQ   s         r?   _accumulatez/BarChart._getConfigureData.<locals>._accumulate   s    //Q///00!4aaa * *A(|| * *!Fe88!!HHHMHHHH!!HHHMHHHH* E"""E"""""rA   r   c              3   (   K   | ]}|         V  d S r   rF   )r   j_datas     r?   r   z-BarChart._getConfigureData.<locals>.<genexpr>   s'      !6!6q%(!6!6!6!6!6!6rA   )
rP   rs   rQ   r   listmaprh   r   r   _configureData)r>   cAStyleccr   br   rQ   s        @@r?   _getConfigureDatazBarChart._getConfigureData   s    #)yc#dmm$$%%444D# # # # # 	!!U#####%%%* 8 8AK!6!6!6!6A!6!6!6777"rA   c                     |                                   | j                            | j                   | j        j        | j        j        fS )z Attempt to return the data range)r   rO   	_setRanger   	_valueMin	_valueMaxr=   s    r?   
_getMinMaxzBarChart._getMinMax   sB         !4555~')AAArA   c                    | j         }|                    | j        | j        |           |                                  |                    | j                   |                    d          }|j        s||k    r|||z   k    r|n|S )z8Position and configure value axis, return crossing valuer   )	rO   setPositionrm   rn   r   	configurer   scale	forceZero)r>   orglengthvA	crossesAts        r?   
_drawBeginzBarChart._drawBegin   s    ^
tvtvv...   
T())) HHQKK	L_Y^^	3v:@U@Uyy\__rA   c                 
   | j         }| j        }|                    | j                   |                                  t                      }t          | dd          }|sV|                    |                                            t          |dd          }t          |dd          }|s|	                    || |j
                   |s|	                    || |j
                   |                    |                                            |                    |           |                    |           |r|	                    || |j
                   |r|	                    || |j
                   t          | dd          D ],}|                     || |j        |j                             -nJt          dd	d
ddddd          |                                                    d          D ]v}|                                }|s	 |                    d          \  }	}
n[#  t!          d|d|dd                    fdt%                                                    D                                 xY w|	vrVt!          d|	ddd                    fdt%                                                    D                                 	 t)          |
          }
t+          |
t,          t.          f          sJ nY#  t!          d|
||d                    fdt%                                                    D                       fz            xY w|
|	<   xd                                 D                                              |                                 }|j                            d          }D ]0\  }
}	|	dk    r(|                    |                                            4|	dk    r|                    |           P|	d k    r|	                    || |j
                   t|	d!k    r|                    |           |	d"k    r|	                    || |j
                   |	d#k    r|                    |           |	d$k    r|                    |           |	dk    r>t          | dd          D ],}|                     || |j        |j                             -2| `|S )%z"finalize the drawing of a barchartr_   NdrawGridLastF)parentdimrX   rF   r   r.   r         r         )
backgroundrP   rO   rN   rR   categoryAxisGridvalueAxisGridrX   ,=zBadly formatted zIndex clause z in z
allowed variables are

c                 *    g | ]}|d |         S r   rF   r   kZs     r?   r   z(BarChart._drawFinish.<locals>.<listcomp>1  sl      @m  @m  @m  WX  KL  KL  KL  MN  OP  MQ  MQ  AR  @m  @m  @mrA   zUnknown zIndex variable c                 *    g | ]}|d |         S r   rF   r   s     r?   r   z(BarChart._drawFinish.<locals>.<listcomp>3  sl      ub  ub  ub  LM  @A  @A  @A  BC  DE  BF  BF  vG  ub  ub  ubrA   zCBad zIndex value %r in clause %r of zIndex
allowed variables are
%sc                 *    g | ]}|d |         S r   rF   r   s     r?   r   z(BarChart._drawFinish.<locals>.<listcomp>8  sl      Fs  Fs  Fs  ]^  QR  QR  QR  ST  UV  SW  SW  GX  Fs  Fs  FsrA   c                     g | ]	\  }}||f
S rF   rF   )r   r   r   s      r?   r   z(BarChart._drawFinish.<locals>.<listcomp>:  s     ,,,31Q!A,,,rA   r   rP   r   rO   r   rN   rR   )rP   rO   r   r   calcBarPositionsr   ri   rk   makeBackgroundmakeGridgetGridDimsmakeBarsr   dictstripsplit
ValueErrorjoinr   keysr   
isinstancefloatintitemssortcontentspop)r>   cAr   rw   zIndexcAdglvAdglazr   r   r   blr   s                @r?   _drawFinishzBarChart._drawFinish  s$   ^
T()))GG/55 :	^EE$%%''(((B~e44EB~e44EH"++at+HHHH"++at+HHHEE$--//"""EE"IIIEE"IIIDbkk!4R^kDDDDbkk!4R^kDDDT-33UUQUU11T"(28;T;T5U5U5U5UU!"	 	 	A \\^^))#..  GGII"(pCAaap$*lmlmlmntntntuyu~u~  @m  @m  @m  @m  \b  cd  ci  ci  ck  ck  \l  \l  @m  @m  @m  vn  vn  vn  &o  p  p  pA::$*fgfgfghihihijnjsjs  ub  ub  ub  ub  QW  XY  X^  X^  X`  X`  Qa  Qa  ub  ub  ub  kc  kc  kc  &d  e  e  ev$QA%as444444v$%lpqrstz{  |E  |E  Fs  Fs  Fs  Fs  bh  ij  io  io  iq  iq  br  br  Fs  Fs  Fs  |t  |t  pu  &u  v  v  v!,,!'')),,,AFFHHHA##B ^ ^!l??EE$--//0000&&EE"IIII***KK2>KBBBB^^EE"IIII''KK2>KBBBBYYEE!HHHH^^EE"IIII%%$T-;;]]QUU11T"(SUS[C\C\=]=]=]=]s   H((AJ -LAM"c                 	  %&'()*+,-./0123456 | j         ,,r| j        /n| j        /| j        }|j        +| j        }t          |          x}| _        t          t          t          t          |                              x| _        }| j        }| j        }| j        }t          | dd          }t          | dd          }	|	dk    r,rdpd}	|	dk    }	|j        1| j        )t%          )fdt'          |          D                       }
||
z
  }1dk    rI| j        }t          |          |
z
  }||z  }|d	z
  |z  }|d	k    r|}|}ndx}}||z  dgz  &&d
d
         'n21dv rd	}||z  }|d	z
  |z  }|}|}n|}|dgz  &&d
d
         '|}dx}x}}||z   |z   x| _        -| j        22r3t/          2t0                    sd2ndd	d2v z  z   dd2v z  z   dd2v z  z   2nd2t3           +d          d	                   }||z
  }2dk    r|-z  x| _        x}x}}n2dk    rdx}x}}|j        %n2d	k    rd}||z
  ||z   z  x}}nq2dk    rd}||z
  ||z   z  x}}n[2dk    rdx}}|r||z
  |z
  |z  nd}nA2dk    rd}||z
  ||z   z  x}}n+2dk    rdx}}||z
  |z
  |z  }n2dk    rd	x}}||z
  |z
  |z  }|| _        || _        || _        | j        }|j        4|j         3|j!        |j"        }}|dcxk    r|k    rn n 4d          *n#d|k     r 4|          *n|dk     r 4|          **| _#        ||z  5d|z  |z  }||z  ||z  z   }|r6|	r||dz  z   |z  }||z  }n|||z  z   ||z  z   |dz  z   |z  }||j$        _%        g | _&        | j&        j'        }| j(        }%&'(*+,-./0123456fd}1dk    rd} tS          |          D ]y\  }!0g (|r|d	z
  |!z
  n|!6|6|z  z   6)*                    |!dd          ..r| d	z  } ||d	z
  |z  dz  z   6n6| |z  z  6t'          |          D ]}" ||"|"            |(           zd
S d} tS          | j                  D ]\  }#}$t          |$          d	k    rdnd1|$D ]}!|r|d	z
  |#z
  n|#6|6|z  z   6g (||!         0)*                    |!dd          ..r| d	z  } ||d	z
  |z  dz  z   6n6| |z  z  6t'          |          D ]}" ||"|"|z  |#z               |(           d
S )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.
        rY   r   rZ   r]   r\   r[   c              3   `   K   | ](}t                              |d d                    V  )dS )r9   FN)r  r   )r   _rN   s     r?   r   z,BarChart.calcBarPositions.<locals>.<genexpr>o  s;      [[1T^^Ahu==>>[[[[[[rA   r   r.   Nr   r   r   r   rw   r   r         ?r   r   r   r;   g      @c                    dk    r |           z  z   z   }n |           \  }}|z   }|          }|d }}ndvr~s||dk    r; 	|                   }r|k     r	n|k    r}	|xx         |z  cc<   	|         }n= 
|                   }r|k    r	n|k     r}
|xx         |z  cc<   
|         }n} |          |z
  }d|cxk     rdk    rn n
d}|dk     rd}                     r|||fp|||f           d S )Nr   r   r   :0yE:0yE>)r   )colNoaccxrm   rw   r  datumrp   rn   _cscaleaccumNegaccumPosbarRowbaseLinecScaleflipXY
groupWidthr9   r   rowrs   rJ   vARDvScalero   xVals           r?   _addBarz*BarChart.calcBarPositions.<locals>._addBar  s   A~~wwu~~-4s:AHJE} :::6:e||"F8D>22*.MAhJJJAhJJX %/ ("F8D>22*.MAhJJJAhJJX %/ ( A*%%%%%%%%%!FU{{UFMM&7a&%7MAaf;MNNNNNrA   r9   Fr   r   )+r   rn   rm   rP   r   rQ   rh   _seriesCountr   r   r   
_rowLengthrL   rM   rK   ri   rs   rN   sumr   r   _groupWidthrJ   r  strr  _normFactor_scale_normFactorB_normFactorG_normFactorSrO   reverseDirectionr   r   	_baseLinelabelslabelPosFrac_barPositionsr   rV   r   r   )7r>   r  rQ   seriesCount	rowLengthwGrM   rK   clbsclbo	lineCountseriesMLineCountr   barsPerGroupwBwSbGapBbGapSaW0aWfBfGfSr   vmvMoffsbGaplbpfaBPrV   r)  lineSeenrl   r  sbsgr  r  r  r   rN   r!  r"  r#  r$  r9   r   r%  rs   rJ   r&  r'  ro   r(  s7                                        @@@@@@@@@@@@@@@@@@r?   r   zBarChart.calcBarPositionsS  s     	&CC&Cy*-d))3d'&)$s3t}}*=*=&>&>>)_
=t2155t3F;;<< 16 <WW}y[[[[kHZHZ[[[\\	&2'>>"Br77Y.Lh&Bq.*,BA~~ " !!#I-qc1H{HH000L!(*B"1$j0BEEE+L !}H{HB!""B"(*2b0:& 	k#.. g!SK%7"88C;<N9OOPQSVZeSePffKFF1IIaL!!4Z>>.0m;D;r;B!^^BbiGG!^^B"ur"uo%B!^^B"ur"uo%B!^^MB"$+"R%(B!BB!^^B"ur"uo%B!^^MBR%(BBB!^^KBR%(BB ^"r|B====b=====vayyHHVVvbzzHH!VVvbzzH!2vbyRxb  	* 7T#Xs*RU
2b5(c136%)BI" '0	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O@ '>>H'oo  
s3CN|a'%//d4i'x?? *MH!1!!3T 9# ==DDHTM)D"9-- ) )EGE%((((F  H"4#455    2&)"ggqjj

i    E4DL<!+b00"D$t)+DFu+C!^^E8UCCF . A#\!^T$9#$==-!&y!1!1 ? ?eL&82&=>>>>CKKKK    rA   c                    | j         }t          |t          t          f          r,||         }t          |t          t          f          r||         }|d}n|dk    r| j        |         |         }ngt          |          r|| j        |         |         z  }nAt          |d          r || j        |         |                   }nd|z  }t          |          |S )zreturn formatted label textNvalues__call__z6Unknown formatter type %s, expected string or function)	rS   r  r   r   rU   r   rQ   rj   	Exception)r>   rl   r  labelFmt	labelTextmsgs         r?   _getLabelTextzBarChart._getLabelText  s    &hU|,, 	+H(D<00 +#E?II!!*51%8II8__ 	! 49U#3E#::IIXj)) 	! 5!1%!899IIJXUCC.. rA   c                 @   |j         }t          |dd          }|dk    }|r| }|x}	}
|rd}
|d|z  z   }|dk    rdpd|z  }|dk    r	||dz  z   }nD|d	k    r|
dk    r	||
z   |z   }n/||z
  }|	 }	n&|d
k    r|
dk    r	||
z   |z   }n||z
  }|	 }	n||
z   |z   }|	|_        |||	fS )zCompute x, y for a label	boxTargetnormalantir   r;   r.   r   midhird   )r   ri   _pmv)r>   labelrm   rn   ro   rp   r   btr^  pmvaluer  r   s                r?   _labelXYzBarChart._labelXY&  s   U;x006z%UE	Mq&B-u99&*AAXXaxxI%ISXXaxxI%ISE	E!A
2vrA   c                     |                      ||          }|r,|                     || j        ||f         |||||||	  	         d S d S r   )rZ  	_addLabelrR   )	r>   rw   rl   r  rm   rn   ro   rp   texts	            r?   _addBarLabelzBarChart._addBarLabelC  sc    !!%.. 	gNN4!?E5RSUVX]_efffff	g 	grA   Fc
                     |	| j         }	|	r[|	j        rVt          j        |	          }	| j        j        dk    rdpd}
||
}||
}|                     |	j        |	||||||||
  
        S d S d S )Nr   r  r  )calcOnly)rW   ri  copyrO   r   rh  )r>   rw   rl   r  rm   rn   ro   rp   rl  nar   s              r?   _addNABarLabelzBarChart._addNABarLabelH  s    :DLr 	h"' 	h2B(!+5=A}ae~v>>"'2q%1eV^f>ggg	h 	h 	h 	hrA   c                    |j         rt          ||j        |j                  }| j        }|r|                     ||||	|          \  }}}n|                     |||||	          \  }}}t          |dd           }|"|                    | |          }||}}|r|}n|}n|r|}||	dz  z   }n
||dz  z   }|}t          |dd           }||                    | |          }|r|}n|}|dk     r|rd|j        z  }d}nd|j	        z  }d}ndx}}|
r
||z   ||z   fS |
                    ||z   ||z              |                    |           |j        |j        }}|r+|r)|                    dt          ||||||                     |                    |           t          | dd           }|r$| |||||||	||||f|_         ||           |`d S d S d S )NfixedEndrf   
fixedStartr   )r1   r3   rT   )visibler   fontNamefontSizer   rf  ri   	_getValuedxdy	setOriginsetTextlineStrokeColorlineStrokeWidthinsertr   rk   _callOutInfo)r>   ri  rb  rw   rl   r  rm   rn   ro   rp   rl  
labelWidthr#  y0x0rd  rq  r   x00y00rr  rx  ry  sCsWalxs                             r?   rh  zBarChart._addLabelQ  sk   = 1	'$T5>5>JJJ\F C!]]51VEBB
B!]]51U6BB
BuZ66H#&&tB//rS BBBB CF3J,CCE#I+CC |T::J%((b11 CCC!tt EHBBBEHBBBR,2r"u,OOBrE2b5)))MM$*E,ABYbY!((1T#c"RRUW%X%X%XYYYEE%LLL$066C '&*1U51U6#cRTUW%X"E


&&&c1	' 1	'\' 'rA   c                     t          ||||          }|j        |_        |j        |_        |j        |_        |j        r|j        |_        |                    |           d S r   )r   r3   r2   r1   r4   rk   )	r>   rw   rm   rn   ro   rp   rl   rs   rs	            r?   _makeBarzBarChart._makeBar  s[    Auf%%)o)  	6 % 5A	arA   c                 6	   | j         }t          | dd           }| j        }| j        }| j        }i }|rSg }	t          | j                  dz
  }
t          |          D ]*\  }}t          |          D ]\  }\  }}}}d ||fvrd||<   +g j        }g j        }t          |          D ]\  }}t          |          }||z  }||         }|	                    |dd          }g j        }t          |          D ]\  }\  }}}}||f|v r
|||f         p|}d ||fv r|r||v r| 
                    |||||||           n|r||	vr| 
                    |||||||d|	  	        }|ru||
         |         \  }}}}| 
                    ||
|||||d|	  	        }|d         |d         z   dz  }|d         |d         z   dz  }| 
                    ||
|||dd|	           |	                    |           |r |d            d }t          |d
          rt          j        |j                  }n!t          | j         d
          r| j         j        }t          |dd           }|rg|r3|dk     rt          |j         |          }nHt#          |j        |          }n2|dk     rt          |j         |          }nt#          |j        |          }|ro|s||z   }||dz  z   }n||z   }||dz  z   } ||            ||           |r9t%          t'          ||          |||j        p|j                  } | r ||            n|r2||_        ||_        ||_        ||_        |                    |           nt7          |          dk    r~t7          |          dk    rk|j        |j        ]|                     |||||||           |r@ ||j        d         |                     ||          | j        |         |         ||           |                     |||||||           tA          |j!                  D ]6}|r2 |tE          ||j        p|j        |j#        |j$                             7|j!        D ]}!|                    |!           |j!        D ]} |                    |            d S )Nr^   r.   r9   FTr   rf   g-C6?)rn  r5   r8   r;   gHz>r   )rb  re  rl   r  rg   )%rN   ri   r8  r   r`   rh   rQ   r   r   r   ro  rj   rm  deepcopyr5   minr8   r   r   r   r1   r2   rm   rn   ro   rp   rk   absr  r	  rZ  rj  r   __self__r   r3   r4   )"r>   rw   lgrN   brBPr#  catNALcatNNACBLrowNoLrl   r%  r  rm   rn   ro   rp   r   lineSyms
styleCountrr   rowStyler9   linePtsrs   r0r1r5   r8   yLxLsympls"                                     r?   	_makeBarszBarChart._makeBars  s   yT+d++% 	*C^^a'F'mm * *
s4=cNN * *0E0Aq%E&>11()u* 	9#B-- K	I K	IJE3TJz)HH~H^^E8U;;FiG-6s^^ >C >C))!E&!%(D0KT8E:J5KWxE&>))! 
*Uf__++BuU1QuVLLLL *E$4$4!00E%!E&QUV\]] ]24V*U2C/Aq%!%!4!4RuQqvVZ[a!b!bB!#Ar!uc 1A!#Ar!uc 1A //6%!F6U[/\\\

5))),wwt}}} 5(++ .!]5<88FFTY11 .!Y-F z$77 
@ 	@ 77$'$>$>EE$'u$=$=EE!!88%(%.%@%@FF%(%?%?F J! ,Zs]Y^GBKKKGBKKK .,Zu-E-EbEL]Lpafapqq- 	J FH FH#(FL$*FMEE&MMMMZZ__Vd):):@[_d_p_|MM!AafU5AAA  J22ajn43E3EeE3R3RY]YbchYijoYpw|  DI  J  J  J  J!!"U51U6BBBB*7+;<< I I IE(7(0(<(R@R(0(<.6.FH H H I I II . 	 	BEE"IIII$ 	 	CEE#JJJJ	 	rA   c	                    |j         rHt          ||j        |j                  }	| j        }
|
r|                     |||||          \  }}}n|                     |||||          \  }}}t          |dd           }|"|                    | |          }||}}|
r|}n|}n|
r|}||dz  z   }n
||dz  z   }|}t          |dd           }||                    | |          }|
r|}n|}|dk     r|
rd|j        z  }d}nd|j	        z  }d}ndx}}|
                    ||z   ||z              |                    |           ||                                fS d S )Nrq  rf   rr  r   rs  )rt  r   ru  rv  r   rf  ri   rw  rx  ry  rz  r{  	getBounds)r>   ri  rb  rl   r  rm   rn   ro   rp   r  r#  r  r  rd  rq  r   r  r  rr  rx  ry  s                        r?   _computeLabelPositionzBarChart._computeLabelPosition  s   = )	($T5>5>JJJ\F C!]]51VEBB
B!]]51U6BB
BuZ66H#&&tB//rS BBBB CF3J,CCE#I+CC |T::J%((b11 CCC!tt EHBBBEHBBBROOBrE2b5)))MM$eoo''''S)	( )	(rA   c                    | j         | j        }}|r||_        |r||_        | j        r@|                    |                     | j        | j                  | j        | j	                   n?|                    | j        |                     | j        | j	                  | j                   |
                    | j                   |                                  dS )zRInformation function, can be called by charts which want to with space around barsN)rP   rO   joinAxisr   r   r   rm   ro   rn   rp   r   r   r   r>   r  r   s      r?   _computeBarPositionszBarChart._computeBarPositions  s    "DNBRr{Rr{< 	TNN4??46$*==tvt{SSSSNN464??46$+#F#F
SSS
T()))rA   c                 r   | j         }|                                  t          | j                  }| j        }g }|j        }|r| j        }|| j        z   }	| j        | j	        z   }
|D ]c}|D ]^\  }}}}||z   }||z   } |t          ||          t          ||          t          ||          |z
  |	t          ||          z
  f           _dn| j        }|| j	        z   }	| j        | j        z   }
|D ]c}|D ]^\  }}}}||z   }||z   } |t          ||          t          ||          t          ||          |z
  |	t          ||          z
  f           _d|                                 |d         g}|D ]}|d         }|d         |d         k     r|d         |d         k     rrt          |d         |d                   t          |d         |d                   t          |d         |d                   t          |d         |d                   f|d<   |                    |           |}d}d}t          |          }t          |          D ]\  }}|d         }||z   }||
k    r n|}dx}}||k     rg||         d         |k    rUt          ||         d         |          }t          ||         d         |          }|dz  }||k     r||         d         |k    U||k    r-||k    r&|}|r||||z   ||z   dfp||||z   ||z   df}||k    r n.||k    r&|}|r|	|z
  ||	||z   dfp||	|z
  ||z   |	df}||k    r n||fS )	ak  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  rh   rQ   r8  r   rm   ro   rn   rp   r  r   r  r   )r>   sizerequiredr#  lenDatar  CaCrd   r`  endbprm   rn   whr   r  r   r   r  maxSmaxPnCrz   civ0v1r   aloahis                                  r?   _computeMaxSpacezBarChart._computeMaxSpace+  s    !!###di..X 	KBdjB&$C J J"$ J JJAq!Q!A!ABAaQq3q88b="s1Qxx-HIIIIJJ Bdk!B&#C K K"$ K KJAq!Q!A!ABAa#a((C!HHrM2Aa=IJJJJK 	
qTF 	 	A"AtAaDyyQqT!A$YYQqT!A$AaD1s1Q4!~~c!A$qQRtnnU"VVaLL 	+ 	+DAbABDB#vvuuA""C#B$$1Q47B;;!A$q'#&&!A$q'#&&Q B$$1Q47B;; 3wwt88D!>r"RVBtGA&>Z2bDQSTWQWXYBZDx''T:2c6"R4":Vr"S&DQSTU>V8##UUTzrA   c                    | j         | j        }}|r||_        |r||_        | j        r@|                    |                     | j        | j                  | j        | j	                   n?|                    | j        |                     | j        | j	                  | j                   |
                    | j                   |                                  | j        }g j        }| j        }t!          |          D ]
\  }}g j        }t!          |          D ]\  }	\  }
}}}d||fv rw| j        }|rb|j        r[t'          j        |          }| j        j        dk    rdpd}||}||} ||                     |j        |||	|
|||                     { |d           |                     ||	          }|r3 ||                     || j        ||	f         ||	|
|||                      |d            ||j                   |j        S )zLInformation function, can be called by charts which want to mess with labelsNr   r  r  )rP   rO   r  r   r   r   rm   ro   rn   rp   r   r   r   rN   r   r8  r   rW   ri  rm  r   r  rZ  rR   r  )r>   r  r   rN   r   r  rl   r%  r  r  rm   rn   ro   rp   rn  r   ri  s                    r?   _computeSimpleBarLabelPositionsz(BarChart._computeSimpleBarLabelPositionsk  s7   "DNBRr{Rr{< 	TNN4??46$*==tvt{SSSSNN464??46$+#F#F
SSS
T()))yI#B-- 	 	JE3	A09#    ,,1eVE&>))B  bg  !Yr]] N4a7AEIT =!%!>A6$44RWb%PQSTV[]cddeeee$--eE::D  $44T4>5RW.;Y[`bgijlmotv|}}~~~~$AajMMMMzrA   c                     t                      }t                      }|                     ||           |                    |           |S r   )r   r  rk   )r>   rw   r  s      r?   r   zBarChart.makeBars  s<    GGWWq	b			rA   c                 
   | j         j        }| j        }t          |          }t	          t          t          t          |                              }|dk    r|dz
  | j        z  || j        z  z   }n| j        }|| j	        |z   z  S )z:for dynamically computing the desired category axis lengthr   r.   )
rP   rs   rQ   rh   r   r   r   rM   rK   rL   )r>   rs   rQ   r   mr$  s         r?   _desiredCategoryAxisLengthz#BarChart._desiredCategoryAxisLength  s~    !'yIIST]]##$$*A#t.q>JJJ$#J.//rA   c                 v   | j         | j        }}|r||_        |r||_        | j        r@|                    |                     | j        | j                  | j        | j	                   n?|                    | j        |                     | j        | j	                  | j                   | 
                                S r   )rP   rO   r  r   r   r   rm   ro   rn   rp   r  r  s      r?   drawzBarChart.draw  s    "DNBRr{Rr{< 	TNN4??46$*==tvt{SSSSNN464??46$+#F#F
SSS!!!rA   rF   r   )FN)F))rB   rC   rD   __doc__r   r&   r   r   r
   r   r   r%   r   r   r	   r   rE   rx   r|   r@   r   r   r   r   r   r  r   rZ  rf  rj  ro  rh  r  r  r  r  r  r  r   r  r  rF   rA   r?   rH   rH   4   s       ..w 
 
 
HH 
"l88Yxx(@S7T7T,U#V#V  ^S  bc  d  d  d  d
</PQQQQ
 $|H3RSSSS
 "\(1QRRRR	

 |D'GHHHH
 !L,GHHHH
 $|D/MNNNN
 |D'XYYYY
 !L,OPPPP
 &d  2N  O  O  O  O
 ',t  3V  ef  g  g  g  g
 %T0yzzzz
 (<	8fuvwwww
 ,7>\klmmmm
 #l4.lmmmm
   ,|H;z{{{{!
" !-UU76&-I-IP~    #
$ !L,x  IJ  K  K  K  K%
& ',~ =    '
8 ','?Fo~  A  A  A  A9
: #l::jjqPQUV.W.W.W`aijno#p#p#p  rW  X  X  X;
H@!M !M !MF= = = =;$ ;$ ;$z    4# # #8B B B	` 	` 	`F F FP}  }  } ~  (  :g g g
h h h h2' 2' 2' 2'h  c c cJ*( *( *(X
  
  
 > > >@# # #J  
0 
0 
0" " " " "rA   rH   c                       e Zd ZdZdZdS )VerticalBarChartz3Vertical bar chart with multiple side-by-side bars.r   NrB   rC   rD   r  r   rF   rA   r?   r  r    s        99GGGrA   r  c                       e Zd ZdZdZdS )HorizontalBarChartz5Horizontal bar chart with multiple side-by-side bars.r.   Nr  rF   rA   r?   r  r    s        ;;GGGrA   r  c                   (    e Zd ZddZd Zd Zd ZdS )
_FakeGroupNc                 F    g | _         t          j        |          | _        d S r   )r   	functools
cmp_to_key_key)r>   r)   s     r?   r@   z_FakeGroup.__init__  s    
(--			rA   c                 :    | j                             |           d S r   )r   r   )r>   whats     r?   rk   z_FakeGroup.add  s    
$rA   c                     | j         S r   )r   r=   s    r?   re  z_FakeGroup.value  s
    zrA   c                 F    | j                             | j                   d S )N)key)r   r  r  r=   s    r?   r  z_FakeGroup.sort  s     
DI&&&&&rA   r   )rB   rC   rD   r@   rk   re  r  rF   rA   r?   r  r    sU        . . . .       ' ' ' ' 'rA   r  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d ZdS )r~   zdx/dzr,   zdy/dzzdepth of an individual serieszz gap around series)rI   theta_xtheta_yzDepthzSpacer;   Nc                 &   t                               |            | j        }| j        }|| j        }| j        }|| j        }| j        j        dk    r||z  |dz   |z  z   }n|d|z  z   }|| j	        z  }| j
        |z  | _        | j        |z  | _        d S )Nr   r.   r   )rH   r   r*  r  rK   r  rM   rP   rs   r/  r  _3d_dxr  _3d_dy)r>   r9  r  r  	_3d_depths        r?   r   zBarChart3D.calcBarPositions  s    !!$''''>DM6>DO6"M11#F*KM6+AAII6)IT%%	l9,l9,rA   c                     | j         }|| j        }| j        }|| j        }| j        j        dk    r| j        |||z   z  |z   z  }n
| j        |z  }|S )Nr   )r  rK   r  rM   rP   rs   r/  )r>   rl   r  r  z0s        r?   _calc_z0zBarChart3D._calc_z0  sf    >DM6>DO6"M11!5&-#8#?@BB!&(B	rA   c                 :   | j         }|| j        }| j        }	|	| j        }	|                     |          }
|
|| j        z  z   }|dk     r||z  }| }||
| j        z  z  }||
| j        z  z  }| j        r||	z  }n||	z  }|	                    d|
|||||||f	           d S )Nr   )
r  rK   r  rM   r  r/  r  r  r   rk   )r>   rw   rm   rn   ro   rp   rl   rs   r  r  r  z1s               r?   r  zBarChart3D._makeBar  s    >DM6>DO6]]5!!&)))77JAFE	R_	R_< 	KAAKA	qBq5e455555rA   c                     |                      |          }| j        }	|	| j        }	|}
||| j        z  z  }||| j        z  z  }| j        r||	z  }n||	z  }|                    d||
||||||f	           d S )Nr.   )r  r  rM   r  r  r   rk   )r>   rw   rl   r  rm   rn   ro   rp   r  r  r  s              r?   rj  zBarChart3D._addBarLabel  s    ]]5!!>DO6	R_	R_< 	KAAKA	qBq5e455555rA   c                    ddl m} t          | j                  }|                     ||           |                                 t                      }| j        }| j        }|	                                }| j
        j        }|dk    r|                                 n)|dk    r#d t          d |D                       D             }|D ]X}|d         dk    rJ|dd          \  }	}
}}}}}}|
|	z
  } |||||z   |||z   ||z  ||z  |j        d |j        |j        d	
           Y|D ]<}|dk    r4|dd          \  }	}
}}}}}}t"                              | |||||||           =|S )Nr   )_draw_3d_barr(   r   r   c                     g | ]
}|d          S )r.   rF   )r   r  s     r?   r   z'BarChart3D.makeBars.<locals>.<listcomp>  s    \\\!\\\rA   c              3   V   K   | ]$}|d          |d         |d         |d         f|fV  %dS )r.   r   r   r   NrF   )r   ts     r?   r   z&BarChart3D.makeBars.<locals>.<genexpr>  s@      -Z-ZA!QqT!A$qt/DQ.G-Z-Z-Z-Z-Z-ZrA   r.   g?)r2   fillColorShadedr1   r3   shading)!reportlab.graphics.charts.utils3dr  r  _cmpZr  r  r   r  r  re  rP   rs   reverser   r2   r1   r3   rH   rj  )r>   r  fgrw   r  r  fg_valuer   r  r  r  rm   rn   ro   rp   rl   rs   dzr  s                      r?   r   zBarChart3D.makeBars  s   BBBBBBDJ'''r"
			GG,,88::#)Ig\\f-Z-ZQY-Z-Z-Z&[&[\\\H 	* 	*AtQww56qrrU22a%uU"WQ1U7AqxGRZ&+ot(-(9uGX$(* * * *  	K 	KA!tt56qrrU22a%uU%%d1U51U6JJJrA   )rB   rC   rD   r   rH   r   r   rE   r  r  r  r  r   r  r  rj  r   rF   rA   r?   r~   r~     s        wH,xg666,xg666h-LMMMh-BCCC	
 
 
H GGFF- - -	 	 	6 6 6$6 6 6    rA   r~   c                       e Zd Zd ZdS )VerticalBarChart3Dc                     t          |d          |d         |d         |d          f|d          |d         |d         |d          f          S )Nr.   r   r   r   r(   r>   r  r   s      r?   <lambda>zVerticalBarChart3D.<lambda>&  sJ    #!uQqT!A$!u5!uQqT!A$!u6MNN rA   NrB   rC   rD   r  rF   rA   r?   r  r  %  s        
N
NEEErA   r  c                       e Zd Zd ZdS )HorizontalBarChart3Dc                     t          |d          |d         |d         |d          f|d          |d         |d         |d          f          S )Nr.   r   r   r   r(   r  s      r?   r  zHorizontalBarChart3D.<lambda>)  sJ    S1Q4%!QqT1Q4%!81Q4%!QqT1Q4%9PQQ rA   Nr  rF   rA   r?   r  r  (  s        QQEEErA   r  c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        d|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )z9A slightly pathologic bar chart with only TWO data items.  r         2   }   ,  r   <      ne   rs     YingYangr   r  rm   rn   rp   ro   rQ   r   r   r1   rO   valueMinvalueMax	valueSteprP   r6  r   rx  ry  anglecategoryNamesrk   r   rQ   r   s      r?   	sampleV0ar  ,  s     c3G:D			BBDBDBIBHBG\BNBLBLBL'+BO$ !BO "BO#%BO %+V$4BO!KKOOONrA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d|j
        _        d	|j        j        _        d
|j        j        _        d|j        j        _        d|j        j        _        dg|j        _        |                     |           | S )z/A pathologic bar chart with only ONE data item.r  r   *   r  r   r  r   r  r  r  rs  r  Jan-99r	  r  s      r?   	sampleV0br  K  s     c3G7D			BBDBDBIBHBG\BNBLBLBL'+BO$ !BO "BO#%BO %-JBO!KKOOONrA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        d|j        j        _        g |j        _        |                     |           | S )z8A really pathologic bar chart with NO data items at all!r  r   rF   r  r   r  r   r  r  r  r  rs  )r   r  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   rx  ry  r  rk   r  s      r?   	sampleV0cr  i  s     c3G4D			BBDBDBIBHBG\BNBLBLBL'+BO$ !BO "BO$&BO!KKOOONrA   c                     t          dd          } ddg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d	|j
        _        d
|j
        _        d|j        j        _        d|j        j        _        d|j        j        _        d|j        j        _        d                    d          }d |D             }||j        _        |                     |           | S )!Sample of multi-series bar chart.r  r   r  r   r     %   -      r      r         &   .   r  r   r  r   r  r   r  r  r  r  rs  r  Jan Feb Mar Apr May Jun Jul Aug c                     g | ]}|d z   S z-99rF   r   r   s     r?   r   zsampleV1.<locals>.<listcomp>      ***A%***rA   )r   r  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   rx  ry  r  r   r  rk   r   rQ   r   catNamess       r?   sampleV1r-    s     c3G +*D
 
		BBDBDBIBHBG\BNBLBLBL'+BO$ !BO "BO#%BO 066s;;H*****H$,BO!KKOOONrA   c                  6   ddg} d}t          dd          }t                      }d|_        d|_        d|_        d|_        | |_        d	|_        d
|_        d
|_	        d|j
        _        d|j
        _        d|j
        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        ||j        _        d|j        j        _        d|j        j        _        d|j        j        _        |                    |           |S )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  rm   rn   rp   ro   rQ   rM   rL   rK   rO   r
  r  r  r6  ru  rv  r   r   rP   r  ry  rk   rQ   r6  r   r   s       r?   	sampleV2ar<        ##D7F c3G			BBDBDBIBHBGBMBOBKBLBLBL#.BL #$BL $'BL!%-BL"$*BO!&1BO#&'BO# #BOKKOOONrA   c                  6   ddg} d}t          dd          }t                      }d|_        d|_        d|_        d|_        | |_        d	|_        d
|_        d
|_	        d|j
        _        d|j
        _        d	|j
        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        ||j        _        d|j        j        _        d|j        j        _        d|j        j        _        |                    |           |S )r  r/  r2  r6  r  r   r  r   r  r   r   r7  r  r8  r  r   r   r9  r:  r;  s       r?   	sampleV2br?    r=  rA   c                     ddg} d}t          dd          }t                      }d|_        d|_        d|_        d|_        | |_        d	|_        d
|_        d
|_	        d|j
        _        d|j
        _        d|j
        _        d|j
        j        _        d|j
        j        _        ||j        _        d|j        j        _        d|j        j        _        d|j
        j        _        d|j
        j        _        d|j        j        _        d
|j        _        d|_        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        |                    |           |S )r  r0  r1  r   r   {G#@r3  r4  r5  r   rB  r6  r  r   r  r   r  r   r   r7  r  r   r8  r  r   r   r9  %0.2fr   r   )r   r  rm   rn   rp   ro   rQ   rM   rL   rK   rO   r
  r  r  r6  ru  rv  rP   r  r   r   ry  rR   r   rS   rx  rk   r;  s       r?   	sampleV2crE    sE    $$D7F c3G			BBDBDBIBHBGBMBOBKBLBLBL#.BL #$BL $*BO!&1BO#&'BO#$'BL!%-BL" #BOBLBBLOBLO BL'BLBLKKOOONrA   c                  2   d} d}d}t          |           t          |          k    s
J d            t          |           t          |          k    s
J d            t          dd          }t                      }d|_        d|_        d|_        d	|_        |f|_        t          j	        |j
        _        d
|_        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        | |j        _        d|j        j        _        d|j        j        _        d|j        j        _        d|j        j        _        d|j        j        _        d|j        j        _        t?          |          }|                     dd           |!                    d           |"                    |           |S )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  rJ  
g        Q?g?皙?g)\(?gp=
ף?g)\(?g)\(?rM  rL  bad datar  r   r   r      rD  r  r   r8  r   r   rs  r   r.   i   i)#rh   r   r  rm   rn   rp   ro   rQ   r   r   rN   r2   rS   rR   rx  ry  r   r  ru  rv  r   rO   rt  r
  r  r  rP   tickUptickDownr  r6  r   	translaterotaterk   namesseries1series2r   r   rw   s         r?   sampleV3rY  -  s   GE BGHGu::W%%%z%%%u::W%%%z%%%c3G			BBDBDBIBHjBGBGBBLOBLO BLBL'BLBLBLBLBLBLBLBO BO$)BO!#%BO '*BO$ !BO $BO&1BO#&'BO#b		AKKSHHSMMMKKNNNNrA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )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  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   ry  r  rk   r  s      r?   	sampleV4ar^  e  s     c3G:D			BBDBDBIBHBG\BNBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )<A bar chart showing value axis region starting *below* zero.r  r   r  r  r   r  r  r  r   r\  r  r  r]  r  s      r?   	sampleV4brb    s     c3G:D			BBDBDBIBHBG\BNBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )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]  r  s      r?   	sampleV4crd    s     c3G:D			BBDBDBIBHBG\BNBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )<A bar chart showing value axis region entirely *below* zero.r  r   iir  r   r  ra  r  r   r\  r  r  r]  r  s      r?   	sampleV4dri    s     c3G<D			BBDBDBIBHBG\BNBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   ))r   r  )r  r  )r  (   )rj  r  c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|j        _        d|j        _        d|j        _        d	|j        j        _        d
|j        j        _        ddg|j        _        |                     |           | S )8A simple bar chart with no expressed spacing attributes.r  r   r  r   r  r   r  r  r   r\  r  r  )r   dataSample5r  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   ry  r  rk   r  s      r?   	sampleV5arn    s     c3GD			BBDBDBIBHBG\BNBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d	|_        d|j        _        d
|j        _        d|j        _        d|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )-A simple bar chart with proportional spacing.r  r   r  r   r  r   rj  r  r   r  r  r   r\  r  r  r   rm  r  rm   rn   rp   ro   rQ   r   r   r1   rJ   rK   rL   rM   rO   r
  r  r  rP   r6  r   ry  r  rk   r  s      r?   	sampleV5brr         c3GD			BBDBDBIBHBG\BNBNBKBOBMBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d|_        d|j        _        d	|j        _        d
|j        _        d|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )6Make sampe simple bar chart but with absolute spacing.r  r   r  r   r  r.   rj  r   r  r  r   r\  r  r  rq  r  s      r?   
sampleV5c1rv    s     c3GD			BBDBDBIBHBG\BNBNBKBOBMBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d	|_        d	|j        _        d
|j        _        d|j        _        d|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )ru  r  r   r  r   r  r.   rj  r  r   r  r  r   r\  r  r  rq  r  s      r?   
sampleV5c2rx  =  s     c3GD			BBDBDBIBHBG\BNBNBKBOBMBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d	|_        d|j        _        d
|j        _        d|j        _        d|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )ru  r  r   r  r   r  r.   rj  r   r   r  r  r   r\  r  r  rq  r  s      r?   
sampleV5c3rz  ^  s     c3GD			BBDBDBIBHBG\BNBNBKBOBMBLBLBL'*BO$ "BO%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d	|_        d
|j        _        d|j        _        d|j        _        d|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )ru  r  r   r  r   r  r.   rj  r  r   r   r  r  r   r\  r  r  rq  r  s      r?   
sampleV5c4r|    rs  rA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        ddg|j        _        |                     |           | S )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  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   r  r  rk   r  s      r?   	sampleH0ar    s     c3G:D			BBDBDBIBHBG\BNBLBLBL'+BO$#%BO %+V$4BO!KKOOONrA   c                     t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d|j
        _        d	|j        j        _        d
|j        j        _        dg|j        _        |                     |           | S )z4Make a pathologic bar chart with only ONE data item.r  r   r  r  r   r  r   r  r~  r  r  r  r  s      r?   	sampleH0br    s     c3G7D			BBDBDBIBHBG\BNBLBLBL'+BO$#%BO %-JBO!KKOOONrA   c                  ~   t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        d|j        j        _        g |j        _        |                     |           | S )z=Make a really pathologic bar chart with NO data items at all!r  r   rF   r  r   r  r   r  r  r~  r  r  r  s      r?   	sampleH0cr    s     c3G4D			BBDBDBIBHBG\BNBLBLBL'+BO$#%BO $&BO!KKOOONrA   c                     t          dd          } ddg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d	|j
        _        d
|j
        _        d|j        j        _        d                    d          }d |D             }||j        _        |                     |d           | S )r  r  r   r  r  r  r   r  r   r  r  er%  r&  c                     g | ]}|d z   S r(  rF   r)  s     r?   r   zsampleH1.<locals>.<listcomp>  r*  rA   barchart)r   r  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   r   r  rk   r+  s       r?   sampleH1r    s     c3G +*D
 
		BBDBDBIBHBG\BNBLBLBL'*BO$066s;;H*****H$,BO!KKJNrA   c                  t   ddg} d}t          dd          }t                      }d|_        d|_        d|_        d	|_        | |_        d
|_        d|_        d|_	        d|j
        _        d|j
        _        d|j
        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        |j
                            |j                   ||j        _        d|j        j        _        d|j        j        _        d|j        j        _        |                    |           |S )r  r/  r2  r6  r  r   r   r  r   r  r   r   r7  r  r   r8  r  r   r   j)r   r  rm   rn   rp   ro   rQ   rM   rL   rK   rO   r
  r  r  r6  ru  rv  r   r   r   rP   r  rx  rk   r;  s       r?   	sampleH2ar    s    ##D7F c3G			BBDBDBIBHBGBMBOBKBLBLBL#.BL #$BL $'BL!%-BL"L27###$*BO!&1BO#&'BO# $BOKKOOONrA   c                  6   ddg} d}t          dd          }t                      }d|_        d|_        d|_        d	|_        | |_        d
|_        d|_        d|_	        d|j
        _        d|j
        _        d
|j
        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        ||j        _        d|j        j        _        d|j        j        _        d|j        j        _        |                    |           |S )r  r/  r2  r6  r  r   r   r  r   r  r   r   r7  r  r8  r  r   r   r  )r   r  rm   rn   rp   ro   rQ   rM   rL   rK   rO   r
  r  r  r6  ru  rv  r   r   rP   r  rx  rk   r;  s       r?   	sampleH2br  @  s    ##D7F c3G			BBDBDBIBHBGBMBOBKBLBLBL#.BL #$BL $'BL!%-BL"$*BO!&1BO#&'BO# $BOKKOOONrA   c                     ddg} d}t          dd          }t                      }d|_        d|_        d|_        d	|_        | |_        d
|_        d|_        d|_	        d|j
        _        d|j
        _        d|j
        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        d|j
        j        _        ||j        _        d|j        j        _        d|j        j        _        d|j        j        _        d|j        _        d|_        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        |                    |           |S )r  rA  rC  r6  r  r   r   r  r   r  r   r   r7  r  r   r8  r  r   r   r  rD  r   r   )r   r  rm   rn   rp   ro   rQ   rM   rL   rK   rO   r
  r  r  r6  ru  rv  r   r   rP   r  rx  rR   r   rS   ry  rk   r;  s       r?   	sampleH2cr  i  sE    $$D7F c3G			BBDBDBIBHBGBMBOBKBLBLBL#.BL #$BL $'BL!%-BL"$*BO!&1BO#&'BO# $BOBLBBLOBLO BL'BLBLKKOOONrA   c                     d} d}d}t          |           t          |          k    s
J d            t          |           t          |          k    s
J d            t          dd          }t                      }d|_        d|_        d	|_        d
|_        |f|_        t          j	        |j
        _        d|_        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        d|j        _        | |j        _        d|j        j        _        d|j        j        _        d|j        j        _        d|j        j        _        t=          |          }|                    |           |S )zEA really horizontal bar chart (compared to the equivalent faked one).rG  rI  rK  rN  r  r   r   r  rO     rD  r   r  r8  r   r   rs  r   r.   iV) rh   r   r  rm   rn   rp   ro   rQ   r   r   rN   r2   rS   rR   rx  ry  r   ru  rv  r   rO   rt  r
  r  r  rP   tickLeft	tickRightr  r6  r   rk   rU  s         r?   sampleH3r    s   GE BGHGu::W%%%z%%%u::W%%%z%%%c3G			BBDBDBIBHjBGBGBBLOBLO BL'BLBLBLBLBLBLBL BO !BO$)BO!'*BO$ $BO&1BO#&'BO#b		AKKNNNNrA   c                  `   t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        ddg|j        _        |                     |           | S )r[  r  r   r  r  r   r  r   r  r  r  r  r  r   r  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   r  rk   r  s      r?   	sampleH4ar    s     c3G:D			BBDBDBIBHBG\BNBLBLBL'*BO$%+V$4BO!KKOOONrA   c                  `   t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        ddg|j        _        |                     |           | S )r`  r  r   r  r  r   r  ra  r  r  r  r  r  r  r  s      r?   	sampleH4br    s     c3G:D			BBDBDBIBHBG\BNBLBLBL'*BO$%+V$4BO!KKOOONrA   c                  `   t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        ddg|j        _        |                     |           | S )z<A bar chart showing value axis region starting *above* zero.r  r   r  r  r   r  r   r  r  r  r  r  r  r  s      r?   	sampleH4cr    s     c3G:D			BBDBDBIBHBG\BNBLBLBL'*BO$%+V$4BO!KKOOONrA   c                  `   t          dd          } dg}t                      }d|_        d|_        d|_        d|_        ||_        t          j        |_	        d|j
        _        d|j
        _        d	|j
        _        d
|j        j        _        ddg|j        _        |                     |           | S )rf  r  r   rg  r  r   r  rh  ra  r  r  r  r  r  r  s      r?   	sampleH4dr  !  s     c3G<D			BBDBDBIBHBG\BNBLBLBL'*BO$%+V$4BO!KKOOONrA   c                  h   t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|j        _        d|j        _        d|j        _        d	|j        j        _        d
dg|j        _        |                     |           | S )rl  r  r   r  r   r  r   r  r  r  r  r  )r   rm  r  rm   rn   rp   ro   rQ   r   r   r1   rO   r
  r  r  rP   r6  r   r  rk   r  s      r?   	sampleH5ar  ?  s     c3GD			BBDBDBIBHBG\BNBLBLBL'*BO$%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d	|_        d|j        _        d
|j        _        d|j        _        d|j        j        _        ddg|j        _        |                     |           | S )rp  r  r   r  r   r  r   rj  r  r   r  r  r  r  r  r   rm  r  rm   rn   rp   ro   rQ   r   r   r1   rJ   rK   rL   rM   rO   r
  r  r  rP   r6  r   r  rk   r  s      r?   	sampleH5br  Z       c3GD			BBDBDBIBHBG\BNBNBKBOBMBLBLBL'*BO$%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d|_        d|j        _        d	|j        _        d
|j        _        d|j        j        _        ddg|j        _        |                     |           | S )z)A simple bar chart with absolute spacing.r  r   r  r   r  r.   r   r   r  r  r  r  r  r  r  s      r?   
sampleH5c1r  z       c3GD			BBDBDBIBHBG\BNBNBKBOBMBLBLBL'*BO$%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d	|_        d	|j        _        d
|j        _        d|j        _        d|j        j        _        ddg|j        _        |                     |           | S 'Simple bar chart with absolute spacing.r  r   r  r   r  r.   r   r  r   r  r  r  r  r  r  r  s      r?   
sampleH5c2r    s     c3GD			BBDBDBIBHBG\BNBNBKBOBMBLBLBL'*BO$%+V$4BO!KKOOONrA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d	|_        d
|_        d	|j        _        d|j        _        d|j        _        d|j        j        _        ddg|j        _        |                     |           | S )r  r  r   r  r     r  r.   r   r   r   r  r  r  r  r  r  r  s      r?   
sampleH5c3r    r  rA   c                     t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d|_        d	|j        _        d
|j        _        d|j        _        d|j        j        _        ddg|j        _        |                     |           | S r  r  r  s      r?   
sampleH5c4r    r  rA   c                  h   t          dd          } t          }t                      }d|_        d|_        d|_        d|_        ||_        t          j	        |_
        d|_        d|_        d|_        d	|j        _        d
|j        _        d|j        _        d|j        j        _        ddg|j        _        d	dlm}  |            }t          j	        |_        t          j        |_        d|_        d	|_         |            }t          j	        |_        t          j        |_        d|_        d	|_         |            }t          j        |_        t          j        |_        d|_        d|_        d	|_        ||j         _!        ||j         d         _!        ||j         d         _!        | "                    |           | S )(Simple bar chart using symbol attribute.r  r   r  r   r  r   r  r   r   r  r  r  r  
ShadedRect
horizontalverticalr.   r   )#r   rm  r  rm   rn   rp   ro   rQ   r   r   r1   rK   rL   rM   rO   r
  r  r  rP   r6  r   r   reportlab.graphics.widgets.gridsr  fillColorStartr<   fillColorEndorientationr3   pinkwhitecylinderModerN   r5   rk   )r   rQ   r   r  sym1sym2sym3s          r?   sampleSymbol1r    s~    c3GD			BBDBDBIBHBG\BNBKBOBMBLBLBL'*BO$%+V$4BO!;;;;;;:<<D ,DD#DD:<<D ,DD#DD:<<D +DD!DDDBGNBGAJBGAJKKOOONrA   c                  8   t          dd          } t          }t                      }d|j        _        d|_        d|_        d|_        d|_        ||_	        t          j        |_        d|_        d|_        d	|j        _        d
|j        j        _        ddg|j        _        d	dlm}  |            |j        _        t          j        |j        j        _        t          j        |j        j        _        d|j        j        _        d|j        j        _        d	|j        j        _         |            |j        d         _        t          j        |j        d         j        _        t          j        |j        d         j        _        d|j        d         j        _        d|j        d         j        _        d	|j        d         j        _         |            |j        d         _        t          j         |j        d         j        _        t          j        |j        d         j        _        d|j        d         j        _        d|j        d         j        _        d	|j        d         j        _         |            |j        d         _        t          j!        |j        d         j        _        t          j        |j        d         j        _        d|j        d         j        _        d|j        d         j        _        d	|j        d         j        _        | "                    |           | S )r  r  r   r   r  r   r  r   r  r   r  r  r  r  r  r.   r   r   )#r   rm  r  rP   rs   rm   rn   rp   ro   rQ   r   r   r1   rK   rL   rO   r
  r6  r   r  r  r  rN   r5   r   r  r  r  r  r  r3   magentar   r<   rk   )r   rQ   r   r  s       r?   sampleStacked1r  /	  sI    c3GD			B%BOBDBDBIBHBG\BNBKBOBL'*BO$%+V$4BO!;;;;;;Z\\BGN$*JBGN!"(,BGN!+BGN"#BGN!"BGN"
BGAJ'-~BGAJ$%+\BGAJ"$.BGAJ!%&BGAJ"$%BGAJ!"
BGAJ'-|BGAJ$%+\BGAJ"$.BGAJ!%&BGAJ"$%BGAJ!"
BGAJ'-{BGAJ$%+\BGAJ"$.BGAJ!%&BGAJ"$%BGAJ!KKOOONrA   c                       e Zd ZdZddZdS )
SampleH5c4r  r  r   c                    t          j        | ||g|R i | t                      }d|_        d|_        d|_        d|_        t          |_        t          j
        |_        d|_        d|_        d|_        d|_        d|j        _        d|j        _        d	|j        _        d
|j        j        _        ddg|j        _        |                     |d           |                                 d S )Nr  r   r  r.   r   r  r   r  r  r  r  r  HBC)r6   )r   r@   r  rm   rn   rp   ro   rm  rQ   r   r   r1   rJ   rK   rL   rM   rO   r
  r  r  rP   r6  r   r  rk   r  )r>   ro   rp   argskwr   s         r?   r@   zSampleH5c4.__init__k	  s    eF6D6662666!!	 ! "!#+.()/(8%
**,,,,,rA   N)r  r   )rB   rC   rD   r  r@   rF   rA   r?   r  r  h	  s.        --- - - - - -rA   r  )h__version__r  rm  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+   rH   r  r  r  r~   r  r  r  r  r  r-  r<  r?  rE  rY  r^  rb  rd  ri  rm  rn  rr  rv  rx  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rF   rA   r?   <module>r     s"   	                          B B B B B B B B B B B B B B B B B B B B B B B B B B B B 7 6 6 6 6 6 6 6 G G G G G G G G 7 7 7 7 7 7 7 7 4 4 4 4 4 4 Y Y Y Y Y Y Y Y Y Y J J J J J J J J J J J J J J _ _ _ _ _ _ _ _ _ _ _ _ X X X X X X X X 4 4 4 4 4 4 5 5 5 5 5 5      $ $ $ $ $ $ $ $*w" w" w" w" w"x w" w" w"r    x          ' ' ' ' ' ' ' '` ` ` ` ` ` ` `DO O O O O$4 O O OR R R R R:&8 R R R  >  <  :     F& & &R& & &R/ / /d5 5 5p  :  :  :  B 766  8  B  B  B  B  F  :  8  8  >' ' 'T& & &R/ / /d/ / /d  8  8  8  8 766  6  @  @  @  @  >4 4 4l6 6 6r- - - - - - - - - -rA   