
    Kwg             
       *   d Z dZddlZddlmZmZmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZ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  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, dd
l-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 dddddddddd	Z8dddddddddd	Z9dZ:de:z
  Z; G d de5      Z< G d de/      Z=dPdZ>d Z? G d  d!e1      Z@d" ZAd# ZBdQd%ZCdRd&ZDd' ZEd( ZFd) ZG ej                  eG      ZGd* ZIdPd+ZJd, ZK ej                  eK      ZKd- ZLdPd.ZMd/ ZN G d0 d1eO      ZP G d2 d3e@      ZQ G d4 d5eQ      ZRdd6lSmTZTmUZUmVZVmWZW  G d7 d8e/      ZX G d9 d:      ZYd; ZZ ej                  eZ      ZZ eUd<      Z[ G d= d>eQ      Z\d? Z]d@ Z^dA Z_dB Z`dC ZadD ZbdE ZcdF ZddG ZedH ZfdI ZgehdJk(  rd	 ddliZiddKljmkZk eij                  d$d xs dLgZlelD ]?  Zmemj                  dM      remndNemz  Zo  ep       eo          Zq ekj                  eqdOeoz         A yy)Sz3.3.0z|Basic Pie Chart class.

This permits you to customize and pop out individual wedges;
supports elliptical and circular pies.
    N)sincospi)colors)isNumberisListOfNumbersOrNoneisListOfNumbersisColorOrNoneisStringisListOfStringsOrNoneOneOf	isBooleanisListOfColorsisNumberOrNoneisNoneOrListOfNoneOrStringsisTextAnchorisNoneOrListOfNoneOrNumbersisBoxAnchorisStringOrNoneNoneOrEitherOrisNumberInRange
isCallable)uSymbol2SymbolisSymbol)*)GroupDrawingEllipseWedgeStringSTATE_DEFAULTSArcPathPolygonRectPolyLineLine)TypedPropertyCollection
PropHolder)PlotArea)_objStr)Labelcmpwswsseenennw)	r   -   Z              i;  gHz>     v@c                       e Zd Zd Zd Zy)
WedgeLabelc                      y N selfbas     Z/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/charts/piecharts.py	_checkDXYzWedgeLabel._checkDXY,   s        c                 4   | j                   }|dv rt        | j                  dz  dz        dz  dz  }|dz  s0| j                  |z
  dz  }t        |      dkD  r||dkD  xr dxs dz  }t	        | d	d       xr t
        xs t        |   }| j                  |       |S )
N)autoxautoyh  g     F@r7   r8      r   r=   _anti)	boxAnchorint_pmvabsgetattr_ANGLE2RBOXANCHOR_ANGLE2BOXANCHORrH   )rE   rF   nadas       rG   _getBoxAnchorzWedgeLabel._getBoxAnchor.   s    ^^""tyy}c)*2-s2BGii"n+r7192a4;B-#.B$wt,B1BVFVXZ[BNN2	rI   N)__name__
__module____qualname__rH   rY   rC   rI   rG   r@   r@   +   s    
rI   r@   c                   *   e Zd ZdZ edei d eed      d eed      d eed      d	 eed
      d e e	ddd      d      d e e	ddd      d      d eed      d eed      d ee
d      d eed      d eed      d eed      d eed      d  eed!      d" eed#      d$ eed%      d& eed'      d( eed)      d* eed+      d, eed-      d. eed/      d0 eed1      d2 eed3      d4 eed5      d6 eed7      d8 eed9      d: eed;      d< eed=      d> eed?      d@ eedA      dB eedC      dD eedE      dF eedG      dH eedI      dJ eedK      dL eedM      dN eedO      dP eedQ      dR e ee      dSdT      dU eedV      dW eedX      dY eedZ      d[ e e	d\d]      d^      d_ e e	d`dadb      dc      Zdd Zy`)fWedgeProperties,  This holds descriptive information about the wedges in a pie chart.

    It is not to be confused with the 'wedge itself'; this just holds
    a recipe for how to format one, and does not allow you to hack the
    angles.  It can format a genuine Wedge object for you with its
    format method.
    strokeWidthzWidth of the wedge borderdesc	fillColorzFilling color of the wedgestrokeColorzColor of the wedge borderstrokeDashArrayzZStyle of the wedge border, expressed as a list of lengths of alternating dashes and blanksstrokeLineCapr         z#Line cap 0=butt, 1=round & 2=squarestrokeLineJoinz$Line join 0=miter, 1=round & 2=bevelstrokeMiterLimitz$Miter limit control miter line joinspopoutz How far of centre a wedge to popfontNamez"Name of the font of the label textfontSizez,Size of the font of the label text in points	fontColorz#Color of the font of the label textlabelRadiuszpDistance between the center of the label box and the center of the pie, expressed in times the radius of the pielabel_dxzX Offset of the labellabel_dyzY Offset of the labellabel_anglezQAngle of the label, default (0) is horizontal, 90 is vertical, 180 is upside downlabel_boxAnchorzAnchoring point of the labellabel_boxStrokeColorzBorder color for the label boxlabel_boxStrokeWidthzBorder width for the label boxlabel_boxFillColorzFilling color of the label boxlabel_strokeColorzBorder color for the label textlabel_strokeWidthzBorder width for the label text
label_textzText of the labellabel_leading label_widthzWidth of the labellabel_maxWidthz#Maximum width the label can grow tolabel_heightzHeight of the labellabel_textAnchorz$Maximum height the label can grow tolabel_visible True if the label is to be drawnlabel_topPaddingzPadding at top of boxlabel_leftPaddingzPadding at left of boxlabel_rightPaddingzPadding at right of boxlabel_bottomPaddingzPadding at bottom of boxlabel_simple_pointerzSet to True for simple pointerslabel_pointer_strokeColorzColor of indicator linelabel_pointer_strokeWidthzStrokeWidth of indicator linelabel_pointer_elbowLengthz&Length of final indicator line segmentlabel_pointer_edgePadz!pad between pointer label and boxlabel_pointer_piePadz!pad between pointer label and pieswatchMarkerz!None or makeMarker('Diamond') ...rb   advancedUsagevisiblezSet to false to skip displayingshadingAmountz"amount by which to shade fillColorshadingAnglez6shading changes at multiple of this angle (in degrees)shadingDirectionnormalantiz2Whether shading is at start or end of wedge/sectorshadingKindNlightendarkenzuse colors.Whiter or Blackerc                    d| _         d | _        t        d   | _        t        d   | _        d| _        d| _        d| _        d| _        t        d   | _	        t        d   | _
        t        d   | _        d| _        dx| _        x| _        | _        d | _        dx| _        x| _        x| _        | _        d	| _        d | _        d
| _        d | _        d | _        d| _        d x| _        x| _        x| _        | _        d| _        d| _         d| _!        tD        jF                  | _$        d
| _%        d| _&        d| _'        d| _(        d| _)        d | _*        d
| _+        d| _,        d| _-        y )Nr   rd   re   rg   rl   rm   rc   333333?rK         ?皙?start   rh   g@߾ @r   ).r`   rc   r"   rd   re   ri   rf   rj   rk   rl   rm   rn   ro   rp   rq   rr   ry   r   r   r   r   rs   rt   ru   rv   rw   rx   rz   r|   r}   r~   r   r   r   r   blackr   r   r   r   r   r   r   r   r   r   rE   s    rG   __init__zWedgeProperties.__init__q   sp   )-8-.?@ !&z2&z2'4;<<<(8nooo 6o9PSWSk&$(!$'!"&!%!$]aaa 0a43FIZ '$%!)/&),&)*&%&"$%! " (rI   rC   )rZ   r[   r\   __doc__AttrMapAttrMapValuer   r
   r   r   r   r   r   r   r   r   r   r   _attrMapr   rC   rI   rG   r^   r^   :   s     -
"81LM-
 4PQ-
 #=6QR-
 ''<  C_  `	-

 %U1Qq\7\]-
 &eAal8^_-
 (6\]-
 h,NO-
  .RS-
  .\]-
 !4YZ-
 #8  2d  e-
  .EF-
  .EF-
 #8  2E  F-
  '{8VW!-
"  ,M?_`#-
$  ,H:Z[%-
& *-=]^'-
( )<]^)-
* )7XY+-
, ".6IJ--
. %^</-
0 #>7KL1-
2 &n:_`3-
4 $N8MN5-
6 (:`a7-
8 %Y4VW9-
: (1HI;-
< )2JK=-
> *(3LM?-
@ +84NOA-
B  ,I6WXC-
D %1D]$^E-
F %1?^$_G-
H %1?g$hI-
J !-X;^ _K-
L  ,H:]^M-
N $F8$4;^mnoO-
P y)JKQ-
R %^9]^S-
T $H2jkU-
V (hv(>DxyW-
X #5i#AGefY-
H^#)rI   r^   c                    | j                   rft        |||      }| j                  sd|_        n5t	        |      dk  s|dkD  r|dk  sd|cxk  rdk  rn nd|_        nd|_        ||_        d	|_        n/|t        | d
t              } |       }||_        ||_	        ||_
        |j                  |_        | j                  s#|j                  |_        |j                  |_        n|j"                  | j"                  dz  }n|j"                  dz  }|j                  ||_        n|j                  |z   |_        t	        |      dk  s|dkD  r|dk  sd|cxk  rdk  rn nd|_        nd|_        |j$                  |_        |j(                  |_        |j,                  |_        |j0                  |_        |j4                  |_        |j8                  |_        |j<                  }	|	|}	|	|_        |j@                  |_!        |jD                  |_#        |jH                  |_%        |jL                  |_'        |jP                  |_        |jR                  |_*        |jV                  |_,        |jZ                  |_.        |j^                  |_0        |jb                  |_2        |jf                  |_        |j"                  |_        |jh                  |_4        |jj                  |_6        |S )Nmiddler8   r<     >r   endr   
labelClassg      @r/   r3   )7simpleLabelsr!   
sideLabels
textAnchorrS   rR   _simple_pointerrT   r@   xyrp   dxrq   dyrs   rP   rm   rr   anglert   boxStrokeColorru   boxStrokeWidthrv   boxFillColorrw   rd   rx   r`   ry   _textrz   leadingr|   widthr}   maxWidthr~   heightr   r   r   r   
topPaddingr   leftPaddingr   rightPaddingr   bottomPaddingr   rl   rn   rc   )
rE   textr   labelXlabelY
wedgeStyler   theLabelsideLabels_dyr   s
             rG   _addWedgeLabelr      s   &&$/"*HE
ReSjU3YD%DUQUDU&-#&+##$  l:>J<

 ))$--HK!+!;!;H""* $ 3 * 3 3c 9""*+(11MAE
ReSjU3YD%DUQUDU%("%("#//","A"A","A"A * = =);;);;%%=$%%33#//&55$11(99%33(99);; * = =!+!?!?#-#B#B "++H"++H#--HOrI   c                 d    | dg|z  } | S |t        |       z
  }|dkD  rt        |       dg|z  z   } | S )Nr{   r   )lenlist)labelsr5   is      rG   
_fixLabelsr      sG    ~ M c&kMQ3frd1f,MrI   c                       e Zd Zd ZddZy)AbstractPieChartc           
         | 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	        ||||||	||
      S )Nrd   rc   re   r`   r          @)r`   rd   re   rc   )slicesr   rT   r   r%   )rE   rowNor   r   r   r   	baseStylestyleIdxstylerd   rc   re   r`   r   s                 rG   makeSwatchSamplez!AbstractPieChart.makeSwatchSample   s    KK	3y>)(#e]GImTX4YZE;	+d0ST	!%):GIN_`d<efe]GI}UY4Z[ungiX\6]^!,qrz!F2I+iPPAaf$3iI 	IrI   Nc                     	 t        | j                  |         }| j                  st        | j                  |   dd      }||}|S #  |}Y 2xY w)zreturn series name i or defaultry   r{   )r+   r   r   rT   r   )rE   r   defaultr   r   s        rG   getSeriesNamezAbstractPieChart.getSeriesName   sU    	4;;q>*D   DKKN<;E $	Ds   A ArB   )rZ   r[   r\   r   r   rC   rI   rG   r   r      s    I	rI   r   c                     | d   |d   dz
  kD  xs@ |d   | d   dz
  kD  xs0 | d   d|d   |d   z   z  dz
  kD  xs |d   d| d   | d   z   z  dz
  kD   S )Nr   rh   g{Gz?rg   r   r   rC   )PQs     rG   boundsOverlapr      s    tAaDI~m1ad4im1Q4ad1Q4i$8N3NmRSTURVX[]^_`]abcdebf]fXgimWmRmnnrI   c                     t        |       }|g}	 |d   }|dz   |z  }||v st        | |   | |         sn|j                  |       6	 |d   }|dz
  |z  }||v st        | |   | |         s	 |S |j                  d|       9)z find overlap run containing B[i]rg   r   )r   r   appendinsert)Br   wrapr5   Rjs         rG   _findOverlapRunr      s    AA	
A
bEqS!G6qtAaD15		 
 aDqS!G6qtAaD15H 	
1	 rI   rg   c                     t        |       }|dkD  r2t        |dz
        D ]!  }t        | ||      }t        |      dkD  s|c S  y)z>determine a set of overlaps in bounding boxes B or return Nonerg   N)r   ranger   )r   r   r5   r   r   s        rG   findOverlapRunr   
  sK    AAsqs 	"A!D)A1vax	" rI   c           
      H   t        |       }|dk  ry | D cg c]  }|j                  d    }}d}g }d}t        |dz         }|}	|s|dk  rt        |      }
|
sy t        |
      }||k(  ry |D cg c]	  }||
v s| c}s|}	d}|
d   }|
d   }||   }t	        | |   j
                        x}}|
dd  D ]C  }||   }t        |t        |d   |d   z
  |d   |d   z
              }|}|| |   j
                  z  }E |t        |      z  }t        | |   j
                  |z
        }t	        |      }||	|dz
  z  |z  z  }|
D ]  }| |   }|j                  }t	        |j
                  |t	        |j
                        |z
  z  z         x}|_        |t        z  }|d   |d   t        |      z  z   |_        |d	   |d
   t        |      z  z   |_        |j                         ||<    |
}|	dz  }	|dz  }|dk  ry y |dk  rt        |      }
|
sy t        |
      }||k(  ry | d   }|j                  }|d   }t        |
      D ]  \  }}| |   }|j                  }|d   }d}d}||dz
  k(  r)||k(  s|d   |d   kD  r|d   |d   k  r|d   |d   z
  }|d   |d   kD  r|d   |d   k  r|d   |d   z
  }||kD  r"|xj                  d|d   |d   z
  z  z  c_        n&||k\  r!|xj                  d|d   |d   z
  z  z  c_        |j                         ||<    |dz  }|dk  ry y c c}w c c}w )Nrh   boundsrg   r      r   cxrxcyryg?r   r   )r   	_origdatafloatr   _360rR   maxminrS   _180_pir   r   r   r   	getBounds	enumerate) Lr   mult0nLlr   OKRPitermultr   nRrrX   r0rLbitaaaabutaantaaorigr   radl1orig1bounds1r   r   diff1diff2s                                    rG   fixLabelOverlapsr    s   	QB	!tV()*1X	*A*	
B	BD%!)ED2gq!AeQB2vu!,!Q!VA,B1B2B2BAbEJJ''C"qrU  aDC!RU
2a51:67adii	 
 E"IBquzz#~&D:D$1+d""B %aD{{!%affRaffb-A&A!BBGm4j4:c#h#664j4:c#h#66{{}!% BDLDAIDA 2gF 2gq!AeQBRx2BLLEHoG | )!aD{{hBqDy!W,!!9WQZ/GAJvay4H$*1Igaj$8E"1:fQi/F1Igaj4H$+AJvay$8E 5=CC#wqz'!*'<"==C"e^CC3
71:(=#>>C;;=AaD!)" AID3 2gW 	+ -s   L0	L:Lc                     t        t        |       t        |            t        t        |       t        |            }}||k\  ry ||fS rB   )r   r   )Ar   r   r   s       rG   intervalIntersectionr  \  s;    
c!fSV
SQA/aA!tDQ3JrI   c                 \   | dz  } d| cxk  rdk  r&n n#|dk(  rdd| fddd| z   dff}n\d| dfd	dd
d| z   ff}nM| dk\  xr dxs d}|dk(  rd|dz
  | fd|dz
  |dz
  fdd| z   |dz
  ff}nd| |dz   fd|dz   |dz   fd|dz   d| z   ff}t        |D cg c]  }|d   |d   k  s| c}      S c c}w )NrM   r8   r<   	clockwiser   )rg   r8   ir  )rg   r<   r   r   rg   rh   )tuple)sa	directionaoffss       rG   _makeSideArcDefsr  a  s    #IB	2zczk!2b	*aR_4A2c
;#c"f~5A3w3#!k!472$s(473QtBwtCx4HHA2d2g$r'$s(3QtCxB4GGAQ,!A$qt)!,--,s   B)B)c                 >    t        |d   |d   z
  | d   | d   z
        S )Nrg   r   r-   )r   r   s     rG   _keyFLAr!  p  s'    qtAaDy1ad##rI   c                     | D cg c]  }|d   |k(  s|d   |d    c}}|sy t        |      dkD  r|j                  t               |d   S c c}w )Nr   rg   key)r   sortr!  )xArcssider  s      rG   _findLargestArcr(  t  sU    @!!d
qt/?1@AT
1vaxG$Q4K 	As   AAAc                    | j                   }|8|d   }|d   }|d}|}n'|d}|}n |d   |d   z
  |d   |d   z
  kD  rd}|}nd}|}|d   }|d   }|sd| _        ||z   | _        |d   }nd| _        ||z
  |z
  | _        |d   }|d   |d   z   dz  x}	|d	<   t        |	t        z        |d
<   t        |	t        z        |d<   ||d<   ||fS )Nlirirg   r   r   edgePadr:   r   midsmidcmidr'  )r   rR   r   r   r   r   )
r   r   r'  datar*  r+  r   r/   r,  r-  s
             rG   _fPLSider1  z  s   ;;D|$Z$Z:DAZDAU2a5[Ar!u$DADAWA9oGaiJai'!J1adC'C$u+s7{#DLs7{#DLDL6MrI   c                 N    t        |j                  d   | j                  d         S )Nr.  )r.   r   r  r	  s     rG   _fPLCFr4    s!    q{{6"1;;v#677rI   c                     | d   S )Nrg   rC   )r  s    rG   _arcCFr6    s    Q4KrI   c                    g g f}ddg}|D ]8  }	t        |	||      \  }
}||
   j                  |	       t        |||
         ||
<   : d}| d gz  }d}|dz  }||z   }t        |      }dD ]f  }
||
   }|rYg }|j                  }g }|j                  }|j                  t               d}||z   }|D ]  }	|	j
                  }||||d   z
  z  z   }|	xj                  |z  c_        |	||d   <   ||d   |z  z   }|d	   }|d
   |d   z
  dz  }||z   |kD  r||z
  }||z
  |k  r||z   }|d   ||z
  |d   ||z   fx|d	<   } ||       ||	_         |t        d||z
  |z
               ||z
  }t        ||d   |d   z         }t        |t        |d   ||d   z   z        |z
        }  |||z
         d}t        |      }|dk  rt        |d      } | snt        |       }!|!|k(  rn| d   }"| d   }#|#dz   }$t        |d |"dz          }%|%t        ||$d        z   }&t        ||"|$ D cg c]  }|d
   |d   z
   c}      |$z   |"z
  ||"   d
   ||#   d   z
  z
  }'|'|&kD  rns||"   d
   |%|'z  |&z  z   }| D ]V  }(||(   }	|	j
                  }|d	   }|d
   |d   z
  dz  }|dz  }||z
  x}|	_        |d   ||z
  |d   |fx||(<   |d	<   ||z
  dz
  }X |dk  r||z   ||
<   d}i ||d   |d   |fS c c}w )Nr   rg   r   )r   rg   r#  r   indexr.  r   r   rh   r,  piePadelbowLengthr   )r   r   )r1  r   r   r%  r4  r   r   r   rS   r   r   sum))r5   r   r   r   r   r   r'  LRmlrr   r   r/   mulGmelhhyhhmTr   aBSaSpyhr0  inclyr	  b2r   nTr   r  j0j1jlsAbovesFreesNeedr  s)                                            rG   _fixPointerLabelsrT    s   	BBQ%C qt$!
1QQs1vA C	4&A
C	B
B$CCA 6qEABABFFvFA6B M{{QtG}_--s
#$$w- fb(Nd1Q4i_b58"R%Rb572B&'d2b51be%<<X13qBr?#U$y/$x.89#c$v,43F0F"GHKL!M" r!tHDQBr'"1!,%Vr65qTrUTQu1Xs1RS6{*"R91QqT!A$Y9:2=b@!B%(1R5QR8BST;rU1XfUl500 'A!A;;DXAA$qt)SB#IB!"u$B-.qT"R%!R,@@AaD4>b3B' r', qSCFm6n c!fc!fc!! :s   K
c                    dt         z  t        |       z  }| D cg c]  }||z  	 }}d}g }|D ]  }|j                  ||dz  z          ||z  }  t        |       dz  }d}	t         dz  }
t	        d      D ]H  }||
z  }t        |D cg c]  }t        t        ||z                c}      }||k  s<|dk(  r| }	n|}	|}J |	dz  t         z  S c c}w c c}w )	Nrh   r   r   g    .Ag      B@$   r  r:   )r   r;  r   r   r   rS   r   )r0  r  facdradsr  hradsr  vstarrstardeltar   r  vs                 rG   theta0r_    s    R4T
C aAcE D 	
BE R#X
a IcMEEtGE2Y eG.1S1X./u9K'bE 9R<) ! /s   C
C
c                       e Zd ZdZd Zy)	AngleDataz/use this to carry the data along with the anglec                 @    t         j                  | |      }||_        |S rB   )r   __new___data)clsr   r0  rE   s       rG   rc  zAngleData.__new__  s    }}S'
rI   N)rZ   r[   r\   r   rc  rC   rI   rG   ra  ra    s
    9rI   ra  c                   :   e Zd Z ed8i ded eed      d eed      d eed      d	 e e	d
d      d      d edd      d ee
d      d eedd      d e e edd      e
f      dd      d e e	ddd      dd      d ee
dd      d e e	d d!      d"      d# eed$      d% eed&      d' eed(      d) edd*d      d+ ee
d,      d- eed.      d/ e ee      d0      ZdZd1 Zd2 Zd3 Zd9d4Zd5 Zd6 Zd7 Zy):PieBASEr0  z7List of numbers defining wedge sizes; need not sum to 1ra   r   z2Optional list of labels to use for each data point
startAnglez#Angle of first slice; 0 is due Eastr  r  anticlockwisez'clockwise' or 'anticlockwise'r   Nz&Collection of wedge descriptor objectsr   zIf true(default) use a simple String not an advanced WedgeLabel. A WedgeLabel is customisable using the properties prefixed label_ in the collection slices.other_thresholdz.A value for doing threshholding, not used yet.rg   r   checkLabelOverlapg?zFIf true check and attempt to fix
 standard label overlaps(default off)pointerLabelMode	LeftRightLeftAndRightr{   	sameRadiiz,If true make x/y radii the same(default off)	orderModefixed	alternate)r   xradiuszX direction RadiusyradiuszY direction RadiusinnerRadiusFractionz$fraction of radii to start wedges atwedgeRecordzcallable(wedge,*args,**kwds)r   zDIf true attempt to make piechart with labels along side and pointerssideLabelsOffsetzWThe fraction of the pie width that the labels are situated at from the edges of the pier   z,A class factory to use for non simple labelsc                 2   t        j                  |        d| _        d| _        d| _        d| _        g d| _        d | _        d| _        d| _	        d| _
        d| _        d | _        d| _        d| _        d x| _        x| _        | _        d| _        d	| _        t)        t*              | _        t.        j0                  | j,                  d   _        t.        j4                  | j,                  d   _        t.        j6                  | j,                  d
   _        t.        j8                  | j,                  d   _        t.        j:                  | j,                  d   _        t.        j<                  | j,                  d   _        t.        j>                  | j,                  d   _        y )Nr   d   )rg   gffffff@g333333?g@r8   r  rg   Frr  r   rh   r      rN      ) r*   r   r   r   r   r   r0  r   ri  r  r   rl  rm  rp  rq  rt  ru  rv  r   rx  r(   r^   r   r   darkcyanrc   
bluevioletbluecyanpinkmagentayellow)rE   kwds     rG   r   zPie.__init__   s-   $
#	$!" $ AEEEt|d&> #-o>#)??A #)#4#4A #);;A #);;A #);;A #)>>A #)==A rI   c                    t        dd      }t               }d|_        d|_        d|_        d|_        g d|_        g d|_        d|j                  _	        d|j                  d	   _
        d
|j                  d	   _	        d
d
g|j                  d	   _        d|j                  d	   _        t        j                  |j                  d	   _        t        j                   |j                  d   _        t        j$                  |j                  d   _        t        j&                  |j                  d
   _        t        j(                  |j                  d	   _        t        j*                  |j                  d   _        t        j,                  |j                  d   _        t        j.                  |j                  d   _        |j1                  |       |S N   rz  2   
   P   r     r   (   r  <   r  r	  crX  r3   fr   r   rh         ?r   rg   r{  rN   r|  )r   rg  r   r   r   r   r0  r   r   r`   rk   re   ro   r   redrn   r}  rc   r~  r  r  
aquamarine	cadetblue
lightcoraladdrE   rX  pcs      rG   demozPie.demo<  sG   CU	%-	!		 		!#$		! ()!u		!$#'		! !'		!!'		!!'!2!2		!!'		!!'		!!'!2!2		!!'!1!1		!!'!2!2		!	b	rI   c                     G d d      }| j                   dz
  }| j                  }dx}x}x}x}	}
t        | j                        }g }|j                  }t        | j                  | j                        }|D ]  \  }}|d   | j                  |d      }|s"| j                  ||z     }|j                  r|j                  sM|dz  }t        | |d|||      } ||       |j                         }|d   |d   z
  }|d   |d   z
  }|D cg c]  }|d   t        ||d   |d   f      f }}t        |d      }t        |d      }|r]|r[|d	k(  r|d   |d   z
  |d   |d   z
  k  rd }n<d }n9|d   |d   z
  d
|d   |d   z
  z  k  rd }n|d   |d   z
  d
z  |d   |d   z
  kD  rd }|r|dz  }|r|dz  }t        |||||||j                   |j"                  |j$                  	      |_        t)        ||	      }	|
|dz   z  }
 |s| j                   dz  }| j                  dz  }| j*                  |z   }| j,                  |z   }| j.                  r| j.                  }| j0                  r| j0                  }| j2                  rt5        ||      x}} |||||g       S ||k(  }|
| j                  k  r|s||k(  rt7        |      }nd }t9        t        |      || j*                  | j,                  | j                   | j                  |      \  } }!}"}#|d	k(  rt)        |!|"      x}!}"| j*                  |!z   }$| j*                  | j                   z   |"z
  }%|%|$z
  dz  }| j                  dz  |#z
  }|$|z   }| j,                  |z   |#z   }| j.                  r| j.                  }| j0                  r| j0                  }| j2                  rt5        ||      x}} |||||| |!|"      S c c}w )Nc                       e Zd ZddZy)!Pie.makePointerLabels.<locals>.PLc                 f    || _         || _        || _        || _        || _        || _        || _        y rB   )centerxcenteryrt  ru  r0  luru)rE   r  r  rt  ru  r0  r  r  s           rG   r   z*Pie.makePointerLabels.<locals>.PL.__init__Z  s3    &&&& 	rI   N)r   r   )rZ   r[   r\   r   rC   rI   rG   PLr  Y  s    rI   r  rh   r   rg   r{   r:   r   ro  g{Gz?)	r   r   r   r*  r+  r8  r,  r9  r:  r   )r'  )r   r   r   r   r   r  ri  r  r   r   r   r   r   r  r(  dictr   r   r   r   r   r   r   rt  ru  rp  r   rQ   rT  )&rE   anglesplModer  r   r   r5   nrnlmaxWsumH
styleCountr   L_addrefArcsr   r  snr   r   r	  r/   hr  r+  r*  rt  ru  r  r  aonRr'  r?  r  r  r@  x0x1s&                                         rG   makePointerLabelszPie.makePointerLabelsX  s   	 	 A$%%%B%%dT%

"4??4>>B 	DAqt|X##Ab)BxKK*-E&&emmXFAT"Su=A!HA!QqT	A!QqT	AFMN1Q4,Q!QqT{;<NBN A&B A&Bb>)!uRU{2a5A;.!!!uRU{4Ar!u#55!Q%1+t+BqE"Q%K7!272272aaqB"1UZUpUpx}  yS  yS  `e  `  `  @AKq;DAaCKD=	@ jjnGkk#oGffWnGffWnG||t||W||t||W~~s77/CCwwggggb991uQTDD'FAdffTVVDJJt{{`de"R>!"Rj BVVBYVVDJJr!b5#+++c/#%W*&&.$<<4<<<<4<<>>3ww+??77''''!Br::_ Os   	 O
c                    t        t        t        | j                              }t	        t        |            x}| _        |dk7  rd|z  nd}|r|D cg c]  }t        ||z  |       c}S |D cg c]  }||z  	 c}S c c}w c c}w )Nr   r>   rg   )r   maprS   r0  r   r;  _sumra  )rE   keepDatar0  r1   r  r   s         rG   normalizeDatazPie.normalizeData  sy    CDII&'c$i((DIdDF.23Iac!$33!%&AAaC&& 4&s   A=.Bc                    t        | dd       }| j                  r2t        | j                  | j                        }d| j
                  _        n| j                  dz  }| j                  dk(  xr dxs d}t        | j                  |            D cg c]  }| }}| j                  dk(  r| j                  s|D cg c]  }t        |d         dk\  s| }}|j                  t        	       g g g}d
}|rL|dk  r|j                  d
      }n|j                  d      }||dz     j                  |       |dz  }|dz  }|rL|d   j!                          |d
   |d   z   |D cg c]  }t        |d         dk  s| c}z   }g }	|	j                  }|D ]^  \  }}
||
|z  z   }t        |
      t"        k\  r||k\  r||f}n	||f}n|d f}|rt%        |d
   |
j&                        |d   f}|} |||f       ` |	S c c}w c c}w c c}w )Nrw  rg   rM   r  r   )r  rs  gh㈵>r#  r   rh   r{  )rT   r   r_  r0  r  r   r   ri  r   r  rq  rS   r%  r6  popr   reverse_ANGLELOra  rd  )rE   wrri  whichWayr  DWrD  r   r  r   endAngler  s                rG   
makeAngleszPie.makeAngles  s   T--??		4>>:J()DKK%3.J>>[07R<1!$"4"4b"4"ABC1QCC>>;&t1qQqTD1A1FFvFBAAQ3aAb	A!A#a QQ  aDLLN!QqT	<1S1Yt^Q<<AHH 	HAu"eh&67H5z8#)!*,B#H,B%1ekk22a59!JqfI	 ? D1 =s   	G49G9G9!G>8G>c                      j                         }g }|D ]&  \  }\  }}||}nd||z   z  }|j                  |       (  j                  }t        |      }t	         j
                  |      }	t         dd       }
| _        t         j                        } j                  }|rd }|rTd} j                  ||      }|j                  }|j                  }|j                  }|j                  }|j                  }d }n j                   dz  } j"                  dz  } j$                  |z   } j&                  |z   } j                  r j                  } j                  r j                  } j(                  rt+        ||      x}} j,                  } fd}t/               }|j0                  }g }|j                  } j2                  }|D ]  \  }\  }}| j                  ||z     }|j4                  s,t7        ||z
        }||}} ||      }|j8                  }|s|rB||z   dz  } | t:        z  }!t=        |!      }"t?        |!      }#|r|t@        k  r|||"z  z   }|||#z  z   }|rtC        ||||||||z  ||z        }$n)|t@        k\  rtE        ||||      }$ntC        ||||||      }$|jF                  |$_#        |jH                  |$_$        |jJ                  |$_%        |jL                  |$_&        |jN                  |$_'        |jP                  |$_(        |jR                  |$_)        |jT                  }%|%r<|tW        |jX                        z  }&|&d	kD  r|%d
k(  rtZ        j\                  ntZ        j^                  }%d	ta        |&      z   }&d	|jb                  z
  }'|jd                  dk(  rd	|'z
  tW        |&d	z
        z  }(|'})n|'d	z
  tW        |&d	z
        z  }(d	})||z
  tW        |&      z  }*|jF                  }+d |$_#        tg        |&      D ]n  },||,|*z  z   }-||,d	z   |*z  z   }. |%|+|)|(|,z  z         }/|rtC        ||||-|.|||z  ||z        }0ntC        ||||-|.|      }0|/|0_#        d |0_$        d|0_%         ||0       p  ||$       |
r |
|$|jh                  |       |jj                  s|s.|r|jl                  }1||1z  }2||1z  }3||2"z  z   }4||3#z  z   }5to         | |4|5|      }6 ||6       |s&|6jp                  r|||"z  z   |6_9        |||#z  z   |6_:        |s;|4|5| |2|3|||6jw                         ||fd	|6_<        ^|sbsf||   }6|6so|6jx                  }7|7d   }8|7d   }9|||9z  z   }:|||8z  z   };|jz                  }<|:|<|9z  z   }=|;|<|8z  z   }> |t}        |:|;|=|>|6j$                  |6j&                  f|j~                  |j                                ||6       |s j                  j8                  }?d}@|D ]  \  }}A j                  |   jF                  r@d	z  }@%|@z  }B j                  |B   jF                   j                  |   _#         j                  |B   j8                   j                  |   _         tg        d@d	z
        D ]8  }C j                  |C   j8                  |?kD  s  j                  C   j8                  }?: |jl                  }1||1z  }3t7               dk  s| dkD  r| dk  sd| cxk  rdk  r2n n/d	 j                  z    j                   z   j$                  z   |?z   }4d}2n+ j$                   j                   j                   z  z
  |?z
  }4d}2||3#z  z   }5to         || |4|5|      }6 ||6       |s||"z  z   |6_9        |||#z  z   |6_:        |r|4|5| |2|3|||6jw                         d|6_<        |6jw                         \  }D}E}F}G |r|rt        |||       |D ]
  }6 ||6        |s}|D ]w  }6|6jp                  rV|sT |t        |6j$                  |6j&                  |6jr                  |6jt                  j~                  |j                               f|si|6jw                         \  }D}E}F}G|6j$                  d	 j                  z    j                   z   j$                  z   k(  r |t        |6jr                  |6jt                  d|6jr                  |6j$                  z   z  |6j&                  dGEz
  z  z   j~                  |j                                |t        d|6jr                  |6j$                  z   z  |6j&                  d|G|Ez
  z  z   |6j$                  |6j&                  d|G|Ez
  z  z   |j~                  |j                                |t        |6jr                  |6jt                  d|6jr                  |6j$                  z   z  |6j&                  dGEz
  z  z   j~                  |j                                |t        d|6jr                  |6j$                  z   z  |6j&                  d|G|Ez
  z  z   |6j$                  |6j&                  d|G|Ez
  z  z   |j~                  |j                               z |S )Nr   rw  Fc                      yNr{   rC   )r   s    rG   <lambda>z Pie.makeWedges.<locals>.<lambda>  s    rI   c                 (    j                  | d      S r  )r   )r   rE   s    rG   r  z Pie.makeWedges.<locals>.<lambda>   s    D..q4 rI   r   )ru  radius1yradius1)ru  rg   r   r   r   )valuelabel)	r   r   r   r   r   r   r   r   r  r.  r/  )r`   rd   r8   r<   r   r   r   r   r   r   r   r   r   r   r   )r   g      ?)Dr  r   r   r   r   r   rT   _seriesCountr   rm  r  rt  ru  r  r  r0  r   r   r   r   rp  r   rl  r   r  rv  r   rS   rk   r   r   r   _ANGLEHIr    r   rc   rd   r`   ri   rf   rj   re   r   r   r   r   WhiterBlackerrQ   r   r   r   rd  r   ro   r   r   _aax_aayr   r   r   r&   r   r   rx  r  r'   )HrE   r  
halfAnglesr   a1a2	halfAngler   r5   r   r  r  r  rl  r  rt  ru  r  r  PL_datagSNgg_addr   r  rv  r   r  r   r   r   rk   averageAngleaveAngleRadianscosAAsinAAtheWedgeshadernshadesr   dshshf1shdashscishsha1sha2shcshWedgero   r   r   r   r   r   r0  sinMcosMlXlYlpellXilYislices_popoutrC  r   r  r   r  y1x2y2sH   `                                                                       rG   
makeWedgeszPie.makeWedges  sS
   "
 	)IAgr"z	BK	i(	) __
KDKK*T--%
&&F %%%fV4BjjGjjGjjGjjGggGCjjnGkk#oGffw&Gffw&G||t||W||t||W~~s77/CCww $ 6 64CG"66   L	4IAgr"z8 Qz\2J%%xRUB gBq6D&&Fv "2s{".w"6O,O,bk 6%</B 6%</B" R"b' '(; ;WM`E`b x<&r2w@H$RWb"gNH ",!5!5H#-#9#9H #-#9#9H &0&?&?H#%/%=%=H"(2(C(CH%'1'A'AH$++FuZ%<%<==Q;.4i.?V]]V^^FGnG$%j&>&>$>M!22H< gai0@@,,Qgai0@@ rE5>1D%//D)-H&$W~ '!CH}!SUDL0$T$S.9.&+BGT4QX,34G,GQXYlQl'nG ',BGT4QX&YG,/).2+./+g' (O8"((6''!&0&<&<$[0$[0!#bh!#bh*4\&PZ[a%!*;*;%'%5AF%'%5AF,17Vl242BR67kkmrRTg+.AK  G#AJ#$;;D#'<D#'<D!#gdl!2B!#gdl!2B#-#G#GD"$tDy.C"$tDy.C!(Br#c!##acc+B0:0T0T0:0T0T#V W "!H(,(:(:(. NHAu#{{1~77 !Q$%aC;?;;q>;S;SA 88<A8M8MA 5N "'q1 FA#{{1~44}D04A0E0EF '1&<&<$[0-2s9J|]`O`fj ,g3.2g3&'(=(=&=tzz%IDFF%RUb%bF!"B%)VVt/D/Ddjj.P%PS`%`F!"B!#bh*4\&PZ[a%%'%5AF%'%5AF,17Vl242BR67kkm+.AK '(kkm2bYL	4\ Q
2CDAE!H O$$Z$qss133qvvaff$.$H$H$.$H$HJ K  "#++-KBr"Rssq!6!66

BTVVKKd166!&&affQSSj1A!##tRPRU|BT(2(L(L(2(L(LN O d3qss
#3ACCr"u4Fqss133PTVXY[V[P\K](2(L(L(2(L(LN O d166!&&affQSSj1A!##tRPRU|BT(2(L(L(2(L(LN O d3qss
#3ACCr"u4Fqss133PTVXY[V[P\K](2(L(L(2(L(LN O'O. rI   c                 b    | j                         }| j                         }|rt        ||      S |S rB   )makeBackgroundr  r   )rE   r?  r/   s      rG   drawzPie.draw  s/    !OOU1QZrI   rC   )F)rZ   r[   r\   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   rk  r   r  r  r  r  r  r  rC   rI   rG   rg  rg  	  s    
, 
O2kl
3:no
 "(1VW
 !{O!DKkl	

 d)QR
 $I  5S  T
 'x6fuvw
 )?43J92U)V  ^g  vw  x
 (d;~(NUWfgh
 !1_nop
 !w{!;!L
 ~4HI
 ~4HI
 +>@fg
 #4.L[\]
  ")2xy!
" (  8Q  R#
$  z 29gh%
H( O188M;^''R[zrI   rg  c                      e Zd ZdZ ee eed       edd       edd       eed       ee	d       ee
d	       eed
       eed       eed       eed       eed            Zd Zd Zd ZddZy)LegendedPiezUPie with a two part legend (one editable with swatches, one hidden without swatches).z#If true then create and draw legendra   NzHandle to legend for piez;Formatting routine for number on right hand side of legend.z:Horizontal space between legend and numbers on r/hand sidez&Colours used for both swatches and piezNames used in legend (or None)z/Numbers used on r/hand side of legend (or None)zPadding on left of drawingzPadding on right of drawingzPadding at top of drawingzPadding at bottom of drawing)rh  
drawLegendlegend1legendNumberFormatlegendNumberOffsetpieAndLegend_colorslegend_nameslegend_datar   r   r   r   c                    t         j                  |        d| _        d| _        d| _        d| _        g d| _        d | _        d| _        t        j                  t        j                  }} |ddddd       |dd	dd
d       |dddddd       |dd	dd
dd       |dddddd       |dd	dd
dd      g| _        | j                  d   | j                  d   _        | j                  d   | j                  d   _        | j                  d   | j                  d   _        | j                  d   | j                  d   _        | j                  d   | j                  d   _        | j                  d   | j                  d   _        d| j                  _        || j                  _        d}d| _        d| _        | j                  | _        ddlm}  |       | _        | j
                  |z   | j,                  _        | j                  | j,                  _        d| j,                  _        d| j,                  _        d| j,                  _        d| j,                  _        d| j,                  _        d| j,                  _        d| j,                  _        g d| _        t?        tA        | j                              D ]C  }| j,                  jB                  jE                  | j                  |   | j<                  |   f       E d| j,                  _#        d | j,                  _$        || j,                  _        d!| j,                  _         |       | _%        d| jJ                  _        d| jJ                  _        d| jJ                  _        d"| jJ                  _#        d | jJ                  _$        | j,                  j                   | jJ                  _        d| _&        d| _'        d| _(        d| _)        d| _*        y )#Nr   rz  )g333333C@g333334@gfffff2@g.@gffffff@r     H   zPANTONE 458 CV)spotNameA   r   zPANTONE 288 CVK   )r  densityr  rg   rh   r   r{  rN   g      ?   3   z%.1f%%)LegendgGz@gףp=
W,@gHz&@   right)zAAA:zAA:zA:zBBB:zNR:zHelvetica-Boldr|  r   zHelvetica-Oblique)+rg  r   r   r   r   r   r0  r   r  r   
PCMYKColorr   r   r   rc   r`   rd   r  r  r  !reportlab.graphics.charts.legendsr  r  deltaxdeltaydxTextSpacer   r   columnMaximum	alignmentr  r   r   colorNamePairsr   rl   rm   _legend2r   r   r   r   r  )rE   r  r   legendOffsetr  r  s         rG   r   zLegendedPie.__init__  s:   T
1	$"--v||E
$.r"RCS$T$.s2aDT$U$.r"RCS\^$_$.s2aDT]_$`$.r"RCS\^$_$.s2aDT]_$`$b  "&!9!9!!<A !%!9!9!!<A !%!9!9!!<A !%!9!9!!<A !%!9!9!!<A !%!9!9!!<A "&"'"$"*99 	=xL0"##( %&"!(<s499~& 	dALL''..0H0H0KTM^M^_`Ma/bc	d 0 !#( #& $%!")!4!"$(LL$<$<!rI   c           	         | j                   r"g | j                  _        g | j                  _        t	        t        | j                              D ]n  }| j                  d k(  rV| j                  |   | j                  |   _
        | j                  j                  j                  | j                  |   d f       nc	 | j                  |   | j                  |   _
        | j                  j                  j                  | j                  |   | j                  |   f       | j                  d k7  s| j                  |   }| j                  }||nLt        |t               r||z  }n6t#        |d      r	 ||      }n!t%        dt'        | j                        z        | j                  j                  j                  d |f       q t(        j+                  |       }| j                   r!|j-                  | j                         | j                  j.                  | j0                  z   | j                  _        | j                  j2                  | j                  _        | j                  j4                  | j                  _        | j                  j6                  | j                  _        | j                  j8                  | j                  _        | j                  j:                  | j                  _        |j-                  | j                         |j=                  | j>                  | j@                         |S # t        $ r | j                  |t        | j                        z     | j                  |   _
        | j                  j                  j                  | j                  |t        | j                        z     | j                  |   f       Y w xY w)N__call__z6Unknown formatter type %s, expected string or function)!r  r  r  r  r   r   r0  r  r   r   rc   r   
IndexErrorr  r  
isinstancestrhasattr
ValueErrorasciirg  r  r  r   r  r   r  r  r   r  shiftr   r   )rE   r  ldflNFrH  s        rG   r  zLegendedPie.draw  s   ??*,DLL'+-DMM(s499~& 	@A  D(+/+C+CA+FA(++22D4L4LQ4OQU3VWJ/3/G/G/JDKKN,LL//668P8PQR8SUYUfUfghUi7jk 4'&&q)--;#+C()CS,c(C$%]`efjf}f}`~%~,,33T#J?-	@. HHTN??EE$,,"llnnT-D-DDDMMO"llnnDMMO#'<<#6#6DMM #'<<#6#6DMM #||DMM*.,,*D*DDMM'EE$-- 	  $"4"457 " J/3/G/G#dNfNfJgHg/hDKKN,LL//668P8PQRSVW[WoWoSpQp8qsw  tE  tE  FG  tH  8I  JJs   7A"L**BOOc                 6   | j                   }| j                  rX|| j                  j                  | j                  z   z  }|| j
                  j                  | j
                  j                        z  }| j                  | j                  z   | j                  z   }||fS rB   )r   r  r  r   r  r  _calculateMaxWidthr  r   r   r   )rE   txtys      rG   _getDrawingDimensionsz!LegendedPie._getDrawingDimensions9  sz    ??$,,..!8!888B$--224==3O3OPPB+DOO;2wrI   c                     |s| j                         \  }}t        ||      }|j                  | j                                |S rB   )r(  r   r  r  )rE   drawingr&  r'  s       rG   r  zLegendedPie.demoA  s9    ..0EBrb"oGDIIK rI   rB   )rZ   r[   r\   r   r   rg  r   r   r   r   r   r   r   r   r  r(  r  rC   rI   rG   r  r    s    _C!)2WXt*DE)$5rs)(9uv*>@hi#$?Ffg"#>Evw"82NO#H3PQ!(1LM$X4RS
HAF'RrI   r  )
_getShaded_2radr   r   c            	          e Zd ZdZ ed/i d eed      d eed      d eed      d eed      d eed      d	 eed      d
 eed      d ee	d      d eed      d eed      d eed      d eed      d eed      d ee
d      d ee
d      d eed      d ee
d      d eed      d eed      d eed      d eed      d eed      d eed      d eed       d! eed"      d# ee
d      d$ eed      d% eed      d& eed      d' eed      d( eed      d) eed      d* eed      d+ eed,      Zd- Zy.)0Wedge3dPropertiesr_   rc   r{   ra   fillColorShadedrn   rl   rm   rr   r   zpadding at bottom of boxrs   rv   rt   ru   rp   rq   r~   rz   r   zpadding at left of boxr}   r   zpadding at right of boxr   zset to True for simple pointersrw   rx   ry   r   r   zpadding at top of boxr   r   r|   ro   rk   shadingrd   strokeColorShadedre   r`   r   zset to false to skip displayingc                 &   d| _         d| _        d| _        d x| _        x| _        | _        t        d   | _        t        d   | _        d| _	        t        d   | _
        t        d   | _        t        d   | _        d	| _        dx| _        x| _        | _        d | _        dx| _        x| _        x| _        | _        d
| _        d | _        d| _        d | _        d | _        d| _        d x| _        x| _        x| _        | _        d| _         d| _!        d| _"        y )Nr   g333333?rg   rd   re   rl   rm   rc   r   rK   r   r   r   )#r`   r0  r   r1  r/  rc   r"   rd   re   rk   rl   rm   rn   ro   rp   rq   rr   ry   r   r   r   r   rs   rt   ru   rv   rw   rx   rz   r|   r}   r~   r   r   r   r   s    rG   r   zWedge3dProperties.__init__v  s#   IMMM!5)-8-.?@&z2&z2'4;<<<(8nooo 6o9PSWSk&$(!$'!"&!%!$]aaa 0a43FIZ '$%!rI   NrC   )rZ   r[   r\   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   rC   rI   rG   r.  r.  I  se     #
 B7#
&}"=#
 !B7#
  b1	#

  b1#
 #84#
 +84NO#
 '{;#
 *-R@#
  ,MrB#
  ,H"=#
  b1#
  b1#
 $N;#
 %^<#
  )2JK!#
" &n"=##
$ *(3LM%#
&  ,I6WX'#
( )B?)#
* )r:+#
, ".b9-#
. ("=/#
0 (1HI1#
2 %Y4VW3#
4 #>r:5#
6 #847#
8 hB/9#
: xR0;#
< #=b9=#
> )B??#
@ ''<"EA#
B #84C#
D y)JKE#
HJ&rI   r.  c                       e Zd Zd Zd Zy)_SL3Dc                     |dk  r
|dz  }|dz  }|| _         || _        ||z   dz  | _        t        ||z
        t        k  | _        y )Nr   rM   r   )lohir-  rS   r  not360)rE   r6  r7  s      rG   r   z_SL3D.__init__  sL    a4#IB#IBrE3;"R%j8+rI   c                 8    d| j                   | j                  fz  S )Nz_SL3D(%.2f,%.2f))r6  r7  r   s    rG   __str__z_SL3D.__str__  s    !TWWTWW$555rI   N)rZ   r[   r\   r   r:  rC   rI   rG   r4  r4    s    ,6rI   r4  c                 (    t        | d   |d          S Nr   r-   r3  s     rG   _keyS3Dr=    s    !QqTN?rI   r<   c            	           e Zd Z ee 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 Zd Zd Zd Zy)Pie3dzA flattening parameter.ra   zdepth of the pie.zThe view angle.)rh  perspectivedepth_3dangle_3dF      r:   c                 r    | j                   |   j                  xr | j                  |   j                  xs dS r<  )_sl3dr8  r   rk   )rE   r   s     rG   _popoutzPie3d._popout  s.    zz!}##=A(=(=BBrI   c                     | j                   |xr | j                  xs dz   | j                  |      t        t	        | j
                  |   j                              z  z   S r<  )_cx
_xdepth_3drG  r   r,  rF  r-  rE   r   rX  s      rG   CXzPie3d.CX  J    xx.t3!4T\\!_StzzZ[}O`O`IaEb5bbbrI   c                     | j                   |xr | j                  xs dz   | j                  |      t        t	        | j
                  |   j                              z  z   S r<  )_cy
_ydepth_3drG  r   r,  rF  r-  rK  s      rG   CYzPie3d.CY  rM  rI   c                 j    | j                  ||      | j                  t        t        |            z  z   S rB   )rL  _radiusxr   r,  rE   r   orX  s       rG   OXzPie3d.OX  (    wwq|DMM#eAh-777rI   c                 j    | j                  ||      | j                  t        t        |            z  z   S rB   )rQ  _radiusyr   r,  rT  s       rG   OYzPie3d.OY  rW  rI   c                 h    | j                   }t        t        ||z
        t        ||z
  dz               S )NrM   )_3dvar   rS   )rE   r  r\  s      rG   rad_distzPie3d.rad_dist  s-    

3qw<AeGCK 011rI   c                 |   t         j                  |        t        t              | _        t
        j                  | j                  d   _        t
        j                  | j                  d   _        t
        j                  | j                  d   _        t
        j                  | j                  d   _        t
        j                  | j                  d   _        t
        j                  | j                  d   _        t
        j                  | j                  d   _        d x| _        | _        d| _        d	| _        g d
| _        y )Nr   rg   rh   r   r{  rN   r|  i,  r  )g      )@g4@r   g      6@g      @g      2@g      *@)rg  r   r(   r.  r   r   r}  rc   r~  r  r  azurecrimson
darkvioletrt  ru  r   r   r0  r   s    rG   r   zPie3d.__init__  s    T-.?@#)??A #)#4#4A #);;A #);;A #)<<A #)>>A #)#4#4A &**t|
=	rI   c                    | j                  |      }|| j                  | j                  |   j                        k  r| j                  |d      | j	                  |d      | j                  |d      | j	                  |d      | j                  ||d      | j                  ||d      | j                  ||d      | j                  ||d      g}|j                  |t        ||||d      f       y y )Nr   rg   rd   rc   r`   ri   )	r]  rF  r-  rL  rQ  rV  rZ  r   r$   )	rE   r   r   r   rd   r`   rc   rdrH  s	            rG   	_fillSidezPie3d._fillSide  s    ]]5!dmmDJJqM--..1dggal!TWWQq\%"4771U1#5%"4771U1#57A HHby]hxyz{| /rI   c                 "     j                   } j                  }t        |dz         x} _        t	        |      } j
                  }t        |      |z   _        t        |      |z   _	         j                   j                  dz  z    _         j                   j                   j                  z
  dz  z    _         j                   j                  z
  x}} j                   r j                   } j"                  r j"                  }| _        d j&                  dz  z
  |z  x _        } j+                         } j,                  }	 j.                  }
 j0                  } j2                  } j4                  } j6                  } j8                  }t;        |      x _        }g x} _        tA               }t         jB                        } jD                  dk(  xr dxs d}|D ]4  }||z  }|||z   }}|}|dkD  r||}}|jG                  tI        ||             6 tK         jL                  |      }|}|d	z   }g }g }g } G  fd
dtN              } jP                  }tS        |      D ]E  }||   }|jT                  s||   } | jV                  x}!}| jX                  x}"}t[        |"|!z
        }#|#t\        k  rOt_        |j`                  |jb                  |jd                        }$t_        |jf                  |jh                  |jd                        xs |$}%|jj                  }& |
|d      }' ||d      }( |
|d      }) ||d      }*|r|jm                  to        |)|*||!|"||%|&|$d
             |!|cxk  r|"k  rn n|}|!|cxk  r|"k  rn n|}tq        |%|$|&d      }+|+js                  |)|*||||d       |+ju                   |||d       |||d             |+js                  |'|(||||d       |+jw                          ||k  r||k\  rd},nty         ||       ||            },|jG                  |,|+f        ||||!|%|&|$        ||||"|%|&|$       |j`                  }$|jf                  xs |$}%|jG                  to        |'|(||!|"||%|&|$d
             |#tz        k\  rt}        |'|(|||%|&|$d      }-nto        |'|(||!|"||%|&|$d
      }-|jG                  |-       ||   }.|j~                  sy|.s}|j                  }/ xj$                  |/z  c_         xj(                  |/z  c_        | j                  }0 |||0d      }1 |||0d      }2t         |.|0|1|2||      }3|jG                  |3       |r@|1|2|0 j$                   j(                   |
|d       ||d      |3j                         d|3_D        | _        | _        H |j                  t               |r|rt        | j                         |D 4cg c]  }4|4d   	 c}4|z   |z   D ]  }5|jm                  |5        |S c c}4w )Nr8   r         ?g      Y@r  r   rg   r   r:   c                   .    e Zd ZW  j                  Zd Zy) Pie3d.draw.<locals>.WedgeLabel3dc                     |d   dk(  r>t        | d      s1| j                  | _        | j                   | j                  z   | _        y y y )Nr   r5   _ody)r  r   rk  rP  rD   s     rG   rH   z*Pie3d.draw.<locals>.WedgeLabel3d._checkDXY  sB    a5#:"4/$(GG	#'99*t"> 0 rI   N)rZ   r[   r\   rP  rH   r   s   rG   WedgeLabel3dri    s    J?rI   rl  )ru  rd   r`   rc   ri   rc  )ru  moveTo)ru  r  )rd   r`   rc   ri   )r   r  r#  )Ir   rB  r   r\  r,  rA  r   rJ  r   rP  r   r   rI  r   r   rO  rt  ru  rS  r@  rY  r  r  rL  rQ  rV  rZ  r]  re  r   r  rF  r   ri  r  r   r4  r   r   r@   rl  r   r   r6  r7  rS   r  r+  rc   r/  r0  rd   r1  r`   r  r    r#   addArclineTo	closePathr   r  r   r   ro   r-  r   r   r   r%  r=  r  r   )6rE   r   	_3d_angler\  a0rA  radiusxradiusyr0  r;  rL  rQ  rV  rZ  r]  re  r5   rF  r  lastr^  angle1angle0r   r  rD  rF  r   rl  rl  r   r   slr6  r7  r  rc   rd   r`   cx0cy0cx1cy1rH  rd  r  r   ratr-  r   r   r   r1   r   s6   `                                                     rG   r  z
Pie3d.draw  s   MM	!)B,//
5\==b'(*b'(*66$**S.(664;;8#== HHTVVO+'<<4<<<<4<<#&)9)9%)?#?"HH!!#iiWWWWWWWW==NN	 #D	)A
GDOO$^^[(/R41 	/AGA!1T6FFD!tffVVLLvf-.	/ DKK*s]	?: 	? !22q A	(A1IE==(qB%%B%%BRUB({H"5??53H3HWI$U%6%6u7N7Nu}}]jajK++KQq'CQq'CQq'CQq'CeCGRG,7KZc/02 3 <R<"<R<"yU`pqrSwaPAfQ1VA7SwqQ5=VU]BXf-hv.>?B"Q !Ab[C!Ab[C I++8yKHHU3s72b(3V_opr s8|"3Wg(3V_opr !SBw(3V_oprHHX!9D""t''$$ffAc!Ac! d3vfUl[$)/Vc*.--dmmRTUVWXRY`bcdef`g./kkm#&AK !( 'CA	(F 	
7Qt/!"#A1Q4#A%a' 	AEE!H	 $s   Xc                 ^   t        dd      }t               }d|_        d|_        d|_        d|_        g d|_        g d|_        d|j                  _	        d|j                  d	   _
        d
|j                  d	   _	        d
d
g|j                  d	   _        d|j                  d	   _        t        j                  |j                  d	   _        t        j                   |j                  d   _        t        j$                  |j                  d   _        t        j&                  |j                  d
   _        t        j(                  |j                  d	   _        t        j*                  |j                  d   _        t        j,                  |j                  d   _        t        j.                  |j                  d   _        d| j                  d   _        d| j                  d	   _        d| j                  d   _        d| j                  d   _        d| j                  d   _        |j3                  |       |S r  )r   rg  r   r   r   r   r0  r   r   r`   rk   re   ro   r   r  rn   r}  rc   r~  r  r  r  r  r  r   r  r  s      rG   r  z
Pie3d.demoS  s   CU	%-	!		 		!#$		! ()!u		!$#'		! !'		!!'		!!'!2!2		!!'		!!'		!!'!2!2		!!'!1!1		!!'!2!2		!!"A!"A!"A!"A!"A	b	rI   N)rZ   r[   r\   r   rg  r   r   r   r@  rA  rB  rG  rL  rQ  rV  rZ  r]  r   re  r  r  rC   rI   rG   r?  r?    sx    C"82KL/BC/@A
H
 KHHCcc882>}}~rI   r?  c                      t        dd      } t               }d|_        d|_        dg|_        dg|_        d|j                  _        | j                  |       | S )1Make a degenerated pie chart with only one slice.  r     r  r  r  rg   )	r   rg  r   r   r0  r   r   r`   r  rX  r  s     rG   sample0ar  u  sS     	SA	BBDBDdBGBIBIIEE"IHrI   c                      t        dd      } t               }d|_        d|_        d|_        d|_        dg|_        dg|_        d	|j                  _	        | j                  |       | S )
r  r  r  r  r  x   rz  r  r  rg   )r   rg  r   r   r   r   r0  r   r   r`   r  r  s     rG   sample0br    sa     	SA	BBDBDBHBIdBGBIBIIEE"IHrI   c                     t        dd      } t               }d|_        d|_        g d|_        g d|_        d|j                  _        d|j                  d	   _        d
|j                  d	   _        d
d
g|j                  d	   _	        d|j                  d	   _
        t        j                  |j                  d	   _        | j                  |       | S )zFMake a typical pie chart with with one slice treated in a special way.r  r  r  r  r  r  rg   r  r   rh   r  )r   rg  r   r   r0  r   r   r`   rk   re   ro   r   r  rn   r  r  s     rG   sample1r    s     	SA	BBDBD&BG.BIBIIBIIaL BIIaL$%a5BIIaL #BIIaL#ZZBIIaLEE"IHrI   c                  6   t        dd      } t               }d|_        d|_        g d|_        g d|_        d|_        d|_        d|j                  _	        t        j                  |j                  d	   _        t        j                  |j                  d   _        t        j                  |j                  d
   _        t        j                  |j                  d   _        t        j                   |j                  d   _        t        j"                  |j                  d   _        t        j$                  |j                  d   _        t        j&                  |j                  d   _        t        j(                  |j                  d   _        | j+                  |       | S )z"Make a pie chart with nine slices.r  r  }   rD  )	gףp=
?gl?gS㥻?g~jt?gL7A`?gQ?g~jt?gT㥛 ?g333333?)	12345678Xr  rg   r   rh   r   r{  rN   r|  r     )r   rg  r   r   r0  r   r   r   r   r`   r   	steelbluerc   thistle
cornflowerlightsteelbluer  r  r  tandarkseagreenr  r  s     rG   sample2r    s#    	SA	BBDBD#BG >BIBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaL#..BIIaL#ZZBIIaL#00BIIaLEE"IHrI   c                     t        dd      } t               }d|_        d|_        g d|_        d|_        d|_        d|j                  _        t        j                  |j                  d   _        t        j                  |j                  d   _        t        j                  |j                  d	   _        | j                  |       | S )
z(Make a pie chart with a very slim slice.r  r  r  rD  )J   rg   rD  r  rg   r   rh   )r   rg  r   r   r0  r   r   r   r`   r   r  rc   r  r  r  r  s     rG   sample3r    s     	SA	BBDBDBGBHBIBII#--BIIaL#^^BIIaL#..BIIaLEE"IHrI   c                  X   t        dd      } t               }d|_        d|_        g d|_        d|_        d|_        d|j                  _        t        j                  |j                  d   _        t        j                  |j                  d   _        t        j                  |j                  d	   _        t        j                  |j                  d
   _        t        j                  |j                  d   _        t        j                   |j                  d   _        | j#                  |       | S )z/Make a pie chart with several very slim slices.r  r  r  rD  r  rg   rg   rg   rg      r  rg   r   rh   r   r{  rN   )r   rg  r   r   r0  r   r   r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample4r    s     	SA	BBDBD"BGBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrI   c                  x   t        dd      } t               }d|_        d|_        g d|_        g d|_        d|_        d|_        d|_        d|j                  _
        t        j                  |j                  d	   _        t        j                  |j                  d   _        t        j                  |j                  d
   _        t        j                   |j                  d   _        t        j"                  |j                  d   _        t        j$                  |j                  d   _        | j'                  |       | S )zMake a pie with side labels.r  r  r  rD  )r  rg   rg   rg   rg   rh   example1example2example3example4example5example6rg   r  r   rh   r   r{  rN   )r   rg  r   r   r0  r   r   r   r   r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample5r     s     	SA	BBDBD BGXBIBMBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrI   c                     t        dd      } t               }	 d|_        d|_        g d|_        g d|_        d|_        d|_        d|_        d|j                  _
        t        j                  |j                  d   _        t        j                  |j                  d   _        t        j                  |j                  d	   _        t        j                   |j                  d
   _        t        j"                  |j                  d   _        t        j$                  |j                  d   _        t'        dddd      }| j)                  |       | j)                  |       | S )z=Illustrates the pie moving to leave space for the left labelsr  r  r   rD  r  r  rg   r  rh   r   r{  rN   )r   rg  r   r   r0  r   r   r   r   r   r`   r   r  rc   r  r  r  r  r  r'   r  )rX  r  r   s      rG   sample6r    s    	SA	B'BDBD"BGXBIBMBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLQq3AEE"IEE!HHrI   c                     t        dd      } t               }d|_        d|_        d|_        d|_        g d|_        g d|_        d|_        d|_	        d	|_
        d|j                  _        t        j                  |j                  d	   _        t        j                   |j                  d   _        t        j"                  |j                  d
   _        t        j$                  |j                  d   _        t        j&                  |j                  d   _        t        j(                  |j                  d   _        | j+                  |       | S )zCase with overlapping pointersr  r  r  r  rz  )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )r  r  r  r  r  r  example7example8example9	example10	example11	example12	example13	example14	example15	example16	example17	example18	example19	example20	example21	example22	example23	example24	example25	example26	example27	example28rg   r   rh   r   r{  rN   )r   rg  r   r   r   r   r0  r   r   rl  r   r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample7r  ;  s     	SA	BBDBDBHBIbBGkBI BMBBO BII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrI   c                     	 t        dd      } t               }d|_        d|_        d|_        d|_        g d|_        g d|_        d|_        d|_	        d|j                  _        t        j                  |j                  d	   _        t        j                  |j                  d   _        t        j                   |j                  d
   _        t        j"                  |j                  d   _        t        j$                  |j                  d   _        t        j&                  |j                  d   _        | j)                  |       | S )Case with overlapping labelsr  r  r  r  rz  )rg   rg   rg   rg   rg   r   r  rg   rg   rg   rg   rg   rg   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rg   r   rh   r   r{  rN   )r   rg  r   r   r   r   r0  r   r   rl  r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample8r  ]  s     eSA	BBDBDBHBIABG*BI BMBBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrI   c                     	 t        dd      } t               }d|_        d|_        g d|_        g d|_        d|_        d|_        d|_        d|_	        d|j                  _        t        j                  |j                  d	   _        t        j                  |j                  d   _        t        j                   |j                  d
   _        t        j"                  |j                  d   _        t        j$                  |j                  d   _        t        j&                  |j                  d   _        | j)                  |       | S )r  r  r  r  r  ))   r  r     r  r   r  r  rD  #   rD  r  r   r  r  r   r  rg   rz  r   rh   r   r{  rN   )r   rg  r   r   r0  r   r   rl  r   r   r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample9r  }  s     _SA	BBDBDNBG*BI BMBBHBIBII#--BIIaL#^^BIIaL#..BIIaL#22BIIaL#..BIIaL#--BIIaLEE"IHrI   __main__)	renderPDFr  samplezsample%sz%s.pdfrB   )rg   )Frg  )s__version__r   	functoolsmathr   r   r   reportlab.libr   reportlab.lib.validatorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   "reportlab.graphics.widgets.markersr   r   reportlab.lib.attrmapreportlab.graphics.shapesr   r   r   r    r!   r"   r#   r$   r%   r&   r'   reportlab.graphics.widgetbaser(   r)   reportlab.graphics.charts.areasr*   r  r+   $reportlab.graphics.charts.textlabelsr,   	reportlabr.   rV   rU   r  r  r@   r^   r   r   r   r   r   r   r  r  r  r!  
cmp_to_keyr(  r1  r4  r6  rT  r_  r   ra  rg  r  !reportlab.graphics.charts.utils3dr+  r,  r   r   r.  r4  r=  _270rr?  r  r  r  r  r  r  r  r  r  r  r  rZ   sysreportlab.graphicsr  argvr  
startswithnameglobalsr*  
drawToFilerC   rI   rG   <module>r     s   	     @ @ @ @ @ @ H # E  E  E  E M 4 5 6 DSd3UY`de Tct$CVZaef h Z)j Z)x<|x 6o GR
.$
)

w
'D8			f	%D"L2 q
 qfJ# JX O NE&
 E&N6 6
)

w
'c
PC Pf"&.@.26@ D@@ Z
 ,88AB< C5D 7LL*q
Q!')D/#	Who67 rI   