
    kf             
       l   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 T 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=dRdZ>d Z? G d  d!e1          Z@d" ZAd# ZBdSd%ZCdTd(ZDd) ZEd* ZFd+ ZG ejH        eG          ZGd, ZIdRd-ZJd. ZK ejH        eK          ZKd/ ZLdRd0ZMd1 ZN G d2 d3eO          ZP G d4 d5e@          ZQ G d6 d7eQ          ZRdd8lSmTZTmUZUmVZVmWZW  G d9 d:e/          ZX G d; d<          ZYd= ZZ ejH        eZ          ZZ eUd>          Z[ G d? d@eQ          Z\dA Z]dB Z^dC Z_dD Z`dE ZadF ZbdG ZcdH ZddI ZedJ ZfdK ZgehdLk    rj	 ddliZiddMljmkZk eijl        d$d         pdNgZlelD ]LZmemn                    dO          remndPemz  Zo  ep            eo                     Zq ekjr        eqdQeoz             KdS dS )Uz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dS )
WedgeLabelc                     d S N selfbas     c/var/www/html/nettyfy-visnx/env/lib/python3.11/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  s-| j        |z
  dz  }t          |          dk    r||dk    rdpdz  }t	          | d	d           rt
          pt          |         }|                     |           |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    ^"""ty}c)**2-s2BG /i"n+r771992a4;B-#.B$wt,,B1BVFVXZ[BNN2	rI   N)__name__
__module____qualname__rH   rY   rC   rI   rG   r@   r@   +   s2          
 
 
 
 
rI   r@   c                   R   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d`S )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          j#        | _$        d
| _%        d| _&        d| _'        d| _(        d| _)        d | _*        d
| _+        d| _,        d| _-        d S )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   st   )-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         w -
 -
 -
"l81LMMMM-
 L4PQQQQ-
 #l=6QRRRR-
 ','<  C_  `  `  `  `	-

 %UU1Qq\\7\]]]]-
 &eeAall8^____-
 (<6\]]]]-
 h,NOOOO-
  <.RSSSS-
  <.\]]]]-
 !L4YZZZZ-
 #l8  2d  e  e  e  e-
  <.EFFFF-
  <.EFFFF-
 #l8  2E  F  F  F  F-
  ',{8VWWWW!-
"  ,|M?_````#-
$  ,|H:Z[[[[%-
& *\-=]^^^^'-
( )L<]^^^^)-
* )L7XYYYY+-
, "\.6IJJJJ--
. %^<<<</-
0 #l>7KLLLL1-
2 &n:_````3-
4 $|N8MNNNN5-
6 (<:`aaaa7-
8 %Y4VWWWW9-
: (<1HIII;-
< )L2JKKK=-
> *\(3LMMM?-
@ +l84NOOOA-
B  ,|I6WXXXC-
D %1LD]$^$^$^$^E-
F %1L?^$_$_$_$_G-
H %1L?g$h$h$h$hI-
J !-X;^ _ _ _ _K-
L  ,|H:]^^^^M-
N $|FF8$4$4;^mnooooO-
P ,y)JKKKQ-
R %^9]^^^^S-
T $|H2jkkkkU-
V (<hv(>(>DxyyyyW-
X #l55i#A#AGeffffY-
H^#) #) #) #) #)rI   r^   c                    | j         rnt          |||          }| j        sd|_        n>t	          |          dk     s|dk    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        |_        nx|j        | j        dz  }n
|j        dz  }|j        ||_        n|j        |z   |_        t	          |          dk     s|dk    r|dk     sd|cxk     rdk     rn nd|_        nd|_        |j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |j        }	|	|}	|	|_        |j         |_!        |j"        |_#        |j$        |_%        |j&        |_'        |j(        |_        |j)        |_*        |j+        |_,        |j-        |_.        |j/        |_0        |j1        |_2        |j3        |_        |j        |_        |j4        |_4        |j5        |_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    6C&&$// 	,"*HE

ReSjjU3YYD%DUDUDUDUQUDUDUDUDUDU&-##&+##$   l:>>J:<<

 ) 	)$-HK!+!;H"* $ 3 * 3c 9"*+(1MAE

ReSjjU3YYD%DUDUDUDUQUDUDUDUDUDU%(""%("#/","A","A * =););%=$%%3#/&5$1(9%3(9); * =!+!?#-#B "+H"+H#-HOrI   c                 t    | dg|z  } n.|t          |           z
  }|dk    rt          |           dg|z  z   } | S )Nr{   r   )lenlist)labelsr5   is      rG   
_fixLabelsr      sF    ~c&kkMQ33frd1f,MrI   c                       e Zd Zd ZddZdS )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   K	3y>>)(#e]GImTX4Y4YZZE;	+d0S0STT	!%):GIN_`d<e<effe]GI}UY4Z4Z[[ungiX\6]6]^^ 	Q!,qrz!F2I+iPPPAaf$3iI I I 	IrI   Nc                     	 t          | j        |                   }n	#  |}Y nxY w| j        s t          | j        |         dd          }||}|S )zreturn series name i or defaultry   r{   )r+   r   r   rT   r   )rE   r   defaultr   r   s        rG   getSeriesNamezAbstractPieChart.getSeriesName   s_    	4;q>**DD	DDD  	/DKN<;;E $s    #rB   )rZ   r[   r\   r   r   rC   rI   rG   r   r      s:        I I I	 	 	 	 	 	rI   r   c                     | d         |d         dz
  k    pV|d         | d         dz
  k    pA| d         d|d         |d         z   z  dz
  k    p |d         d| d         | d         z   z  dz
  k     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                 L   t          |           }|g}	 |d         }|dz   |z  }||v st          | |         | |                   sn|                    |           G	 |d         }|dz
  |z  }||v st          | |         | |                   sn|                    d|           H|S )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66qtAaD1165		
aDqS!G66qtAaD1165	1	
 HrI   rg   c                     t          |           }|dk    r=t          |dz
            D ]*}t          | ||          }t          |          dk    r|c S +dS )z>determine a set of overlaps in bounding boxes B or return Nonerg   N)r   ranger   )r   r   r5   r   r   s        rG   findOverlapRunr   
  s^    AAssqs 	" 	"A!D))A1vvaxxx4rI   F      ?c           
      B   t          |           }|dk     rd S d | D             }d}g }d}t          |dz             }|}|s|dk     rt          |          sd S t                    }	|	|k    rd S fd|D             s|}d}
d         }d         }||         }t          | |         j                  x}}dd          D ]X}||         }t          |
t          |d         |d         z
  |d         |d         z
                      }
|}|| |         j        z  }Y|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   |_        |                                ||<   }|dz  }|dz  }|dk     d S d S |dk     rbt          |          sd S t                    }	|	|k    rd S | d         }|j        }|d         }t                    D ]\  }}| |         }|j        }|d         }d}d}||	dz
  k    s||k    s|d         |d         k    r#|d         |d         k     r|d         |d         z
  }|d         |d         k    r#|d         |d         k     r|d         |d         z
  }||k    r#|xj        d|d         |d         z
  z  z  c_        n(||k    r"|xj        d|d         |d         z
  z  z  c_        |                                ||<   |dz  }|dk     `d S d S )Nrh   c                 (    g | ]}|j         d          S )bounds)	_origdata).0ls     rG   
<listcomp>z$fixLabelOverlaps.<locals>.<listcomp>  s    ***1X	***rI   rg   r      c                     g | ]}|v |	S rC   rC   )r   rr   s     rG   r   z$fixLabelOverlaps.<locals>.<listcomp>#  s    ,,,!Q!VVAVVVrI   r   cxrxcyryg?r   r   r   )r   floatr   _360rR   maxminrS   r   _180_pir   r   r   r   	getBounds	enumerate) Lr   mult0nLr   OKRPitermultnRrX   r0rLbitaaaar   butaantaar   origr   radl1orig1bounds1r   r   diff1diff2r   s                                   @rG   fixLabelOverlapsr    s   	QB	!ttVV*****A	
B	BD%!)ED =2ggq!!AOeeQB2vvuu,,,,r,,, B1B2B2BAbEJ'''C"qrrU    aDC!RU
2a51:6677adiE"IIBquz#~&&D::D$1+d""B % %aD{!%afRafb-A&A!B!BBGm4j4:c#hh#664j4:c#hh#66{{}}!BDLDAIDA 2ggggggF 2ggq!!AOeeQBRxx2BLEHoG || ) )!aD{hBqDyy!W,,!!9WQZ//GAJvay4H4H$*1Igaj$8E"1:fQi//F1Igaj4H4H$+AJvay$8E 5==CC#wqz'!*'<"==CCC"e^^CC3
71:(=#>>CC;;==AaDAID3 2ggggggrI   c                     t          t          |           t          |                    t          t          |           t          |                    }}||k    rd S ||fS rB   )r   r   )Ar   r   r   s       rG   intervalIntersectionr  \  sM    
c!ffSVV

SQA//aA!ttDD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}nZd| dfd	dd
d| z   ff}nK| dk    rdp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 |D                       S )NrM   r8   r<   	clockwiser   )rg   r8   ir  )rg   r<   r   r   rg   c                 6    g | ]}|d          |d         k     |S )rg   rh   rC   r   as     rG   r   z$_makeSideArcDefs.<locals>.<listcomp>n  s%    ,,,!A$qt))!)))rI   )tuple)sa	directionr!  offss       rG   _makeSideArcDefsr&  a  s   #IB	2zzzzczzzzzk!!2b	*aR_4AA2c
;#c"f~5AA3w3#!k!!472$s(473QtBwtCx4HHAA2d2g$r'$s(3QtCxB4GGA,,Q,,,---rI   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                     fd| D             }|sd S t          |          dk    r|                    t                     |d         S )Nc                 H    g | ]}|d          k    |d         |d         S r   rg   rC   )r   r!  sides     rG   r   z#_findLargestArc.<locals>.<listcomp>u  s2    @@@!!d

qt/?1/?/?/?rI   rg   keyr   )r   sortr(  )xArcsr,  r!  s    ` rG   _findLargestArcr1  t  sQ    @@@@u@@@ATT
1vvaxxG$$$Q4KrI   c                    | j         }|K|d         }|d         }|d}|}n4|d}|}n-|d         |d         z
  |d         |d         z
  k    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,  datar3  r4  r   r/   r5  r6  s
             rG   _fPLSider:  z  s,   ;D|$Z$Z:DAAZDAAU2a5[Ar!u$$DAA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 )Nr7  )r.   r   r!  r  s     rG   _fPLCFr=    s     q{6"1;v#6777rI   c                     | d         S )Nrg   rC   )r!  s    rG   _arcCFr?    s    Q4KrI   c                    g g f}ddg}|D ]J}	t          |	||          \  }
}||
                             |	           t          |||
                   ||
<   Kd}| d gz  }d}|dz  }||z   }t          |          }dD ]}
||
         }|rg }|j        }g }|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   |k    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     rEt          |d          } | sn0t          |           }!|!|k    rn| d         }"| d         }#|#dz   }$t          |d |"dz                      }%|%t          ||$d                    z   }&t          d ||"|$         D                       |$z   |"z
  ||"         d
         ||#         d         z
  z
  }'|'|&k    rn||"         d
         |%|'z  |&z  z   }| D ]c}(||(         }	|	j        }|d	         }|d
         |d         z
  dz  }|dz  }||z
  x}|	_        |d         ||z
  |d         |fx||(<   |d	<   ||z
  dz
  }d|dk     E||z   ||
<   d}||d         |d         |fS )Nr   rg   r   r+  r-  r   indexr7  r   r   rh   r5  piePadelbowLengthr   )r   r   c                 0    g | ]}|d          |d         z
  S )r   rg   rC   )r   r  s     rG   r   z%_fixPointerLabels.<locals>.<listcomp>  s$    9991QqT!A$Y999rI   )r:  r   r   r/  r=  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yhr9  inclyr  b2r  nTr   r  j0j1jlsAbovesFreesNeedr   s)                                            rG   _fixPointerLabelsr^    s   	BBQ%C  qt$$!
1QQs1vA
C	4&A
C	B
B$CCA 6 6qE 3	ABABFFvFA6B M M{QtG}_--s
#$$w- fb(Nd1Q4i_b588"R%Rb5772B&'d2b51be%<<X13qBr??###U$y/$x.899#c$v,43F0F"GHHKLLBr!tHHHDQBr''"1!,,,%VVr665qTrUTQu1uXs1RSS6{{*99"R%99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BB+ r'', qSCFc!fc!fc!!rI   c                   
 dt           z  t          |           z  

fd| D             }d}g }|D ]"|                    |dz  z              |z  }#t          |           dz  }d}t           dz  }t	          d          D ]6}||z  t          fd|D                       }	|	|k     r|d	k    r }n}|	}7|d
z  t           z  S )Nrh   c                     g | ]}|z  S rC   rC   )r   dfacs     rG   r   ztheta0.<locals>.<listcomp>  s       aAcE   rI   r   r   g    .Ag      B@$   c                 N    g | ]!}t          t          |z                       "S rC   )rS   r   )r   r!  r   s     rG   r   ztheta0.<locals>.<listcomp>  s)    ...1S1XX...rI   r  r:   )r   rE  r   r   r   )r9  r$  radsr	  hradsvstarrstardeltar   vrb  r   s             @@rG   theta0rk    s   R4T
C    4   D	
BE  R#X
aIIcMEEtGE2YY  eG.......//u99K''bE9R<rI   c                       e Zd ZdZd ZdS )	AngleDataz/use this to carry the data along with the anglec                 J    t                               | |          }||_        |S rB   )r   __new___data)clsr   r9  rE   s       rG   ro  zAngleData.__new__  s!    }}S''
rI   N)rZ   r[   r\   r   ro  rC   rI   rG   rm  rm    s)        99    rI   rm  c                      e Zd Z ed9i 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d:d5Zd6 Zd7 Zd8 ZdS );PieBASEr9  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                    t          j        |            d| _        d| _        d| _        d| _        g d| _        d | _        d| _        d| _	        d| _
        d| _        d | _        d| _        d| _        d x| _        x| _        | _        d| _        d	| _        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 S )Nr   d   )rg   gffffff@g333333?g@r8   r  rg   Fr~  r   rh   r      rN      ) r*   r   r   r   r   r   r9  r   ru  r$  r   rx  ry  r|  r}  r  r  r  r   r  r(   r^   r   r   darkcyanrc   
bluevioletbluecyanpinkmagentayellow)rE   kwds     rG   r   zPie.__init__   s    $
#OO	$!" $ AEEEt|d&> #-o>>#)?A #)#4A #);A #);A #);A #)>A #)=A   rI   c                 4   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         _        |                    |           |S N   r  2   
   P   r     r   (   r  <   r!  r  cra  r3   fr   r   rh         ?r   rg   r  rN   r  )r   rs  r   r   r   r   r9  r   r   r`   rk   re   ro   r   redrn   r  rc   r  r  r  
aquamarine	cadetblue
lightcoraladdrE   ra  pcs      rG   demozPie.demo<  s.   CUU	%%%---	!	 	!#$	! ()!u	!$#'	! !'	!!'	!!'!2	!!'	!!'	!!'!2	!!'!1	!!'!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         |                     |d          }|s(| j        ||z           }|j	        r|j
        sG|dz  }t          | |d|||          } ||           |                                }|d         |d         z
  }|d         |d         z
  }$fd	|D             }t          |d          }t          |d          }|r|r|d
k    r*|d         |d         z
  |d         |d         z
  k     rd }nVd }nS|d         |d         z
  d|d         |d         z
  z  k     rd }n)|d         |d         z
  dz  |d         |d         z
  k    rd }|r|dz  }|r|dz  }t          |||||||j        |j        |j        	  	        |_        t'          ||	          }	|
|dz   z  }
|sl| j         dz  }| j        dz  }| j        |z   }| j        |z   }| j        r| j        }| j        r| j        }| j        rt3          ||          x}} |||||g           S ||k    }|
| j        k     r|s||k    rt5          |          }nd }t7          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        }| j        r| j        }| j        rt3          ||          x}} ||||||||           S )Nc                       e Zd ZddZdS )!Pie.makePointerLabels.<locals>.PLr   c                 h    || _         || _        || _        || _        || _        || _        || _        d S rB   )centerxcenteryr  r  r9  luru)rE   r  r  r  r  r9  r  r  s           rG   r   z*Pie.makePointerLabels.<locals>.PL.__init__Z  s7    &&&& 	rI   N)r   r   )rZ   r[   r\   r   rC   rI   rG   PLr  Y  s(             rI   r  rh   r   rg   r{   r:   r   c           	      \    g | ](}|d          t          |d         |d         f          f)S )r   rg   rh   )r  )r   r!  r  s     rG   r   z)Pie.makePointerLabels.<locals>.<listcomp>v  s9    NNN1Q4,Q!QqT{;;<NNNrI   r{  g{Gz?)	r   r   r   r3  r4  rA  r5  rB  rC  r   )r,  )r   r   r   r   r   r&  ru  r$  r   r   r   r   r   r1  dictr   r   r   r   r   r   r   r  r  r|  r   rQ   r^  )%rE   anglesplModer  r   r   r5   nrnlmaxWsumH
styleCountr  L_addrefArcsr   snr   r   r  r/   hr4  r3  r  r  r  r  aonRr,  rI  r  r  rJ  x0x1r  s%                                       @rG   makePointerLabelszPie.makePointerLabelsX  sE   	 	 	 	 	 	 	 	 A$%%%B%%dT%%

"4?4>BB 	 	DAqt|X##Ab))BxK*-E&EemEXFAT"Su==AE!HHHA!QqT	A!QqT	ANNNNgNNNB A&&B A&&B 
"b 
">))!uRU{2a5A;..!!!uRU{4Ar!u#555!Q%1+t+BqE"Q%K77!N272N272aaqB"1UZUpx}  yS  `e  `  @  @  @AKq;;DAaCKDD 	:jnGk#oGfWnGfWnG|3t|W|3t|W~Cs77/C/CCww2ggggb9991uQTDDD'FAdfTVDJt{`deee"R>!!"Rjj BVBYVDJr!b5#++c/#%W*&.$</4<</4<>?3ww+?+??77r''''!Br:::rI   Fc                     t          t          t          | j                            }t	          t          |                    x}| _        |dk    rd|z  nd|rfd|D             S fd|D             S )Nr   r>   rg   c                 6    g | ]}t          |z  |          S rC   )rm  r   r   r  s     rG   r   z%Pie.normalizeData.<locals>.<listcomp>  s'    333Iac!$$333rI   c                     g | ]}|z  S rC   rC   r  s     rG   r   z%Pie.normalizeData.<locals>.<listcomp>  s    &&&AAaC&&&rI   )r   maprS   r9  r   rE  _sum)rE   keepDatar9  r1   r  s       @rG   normalizeDatazPie.normalizeData  s    CDI&&''c$ii(((DIddDFF 	'3333d3333&&&&&&&&rI   c                    t          | dd           }| j        r't          | j        | j                  }d| j        _        n
| j        dz  }| j        dk    rdpd}d t          | 	                    |                    D             }| j
        dk    r| j        sd	 |D             }|                    t          
           g g g}d}|r[|dk     r|                    d          }n|                    d          }||dz                               |           |dz  }|dz  }|[|d                                          |d         |d         z   d |D             z   }g }	|	j        }|D ]m\  }}
||
|z  z   }t!          |
          t"          k    r||k    r||f}n	||f}n|d f}|r#t%          |d         |
j                  |d         f}|} |||f           n|	S )Nr  rg   rM   r  r   c                     g | ]}|S rC   rC   r   s     rG   r   z"Pie.makeAngles.<locals>.<listcomp>  s    CCC1QCCCrI   )r  r  c                 D    g | ]}t          |d                    dk    |S rg   gh㈵>rS   r   s     rG   r   z"Pie.makeAngles.<locals>.<listcomp>  s'    111qQqTDrI   r-  r   rh   r  c                 D    g | ]}t          |d                    dk     |S r  r  r   s     rG   r   z"Pie.makeAngles.<locals>.<listcomp>  s'    <<<1S1YYt^^Q^^^rI   )rT   r   rk  r9  r$  r   r   ru  r   r  r}  r/  r?  popr   reverserS   _ANGLELOrm  rp  )rE   wrru  whichWayDWrN  r   r!  r  r   endAngler  s                rG   
makeAngleszPie.makeAngles  s"   T---? 	/	4>::J()DK%%3.J>[07R<1CC	$"4"4b"4"A"ABBCCC>;&&t&11A111AFFvFBAA Q33aAAb		A!A#a   QQ   aDLLNNN!QqT	<<<<<<AH 	 	HAu"eh&67H5zz8##))!*,BB#H,BB% :1ek222a59!JAqfIIIIrI   c                                                        }g }|D ]*\  }\  }}||}nd||z   z  }|                    |           + j        }t          |          }t	           j        |          }	t           dd           }
| _        t           j                  } j	        }|rd }|r?d} 
                    ||          }|j        }|j        }|j        }|j        }|j        }d }ni j        dz  } j        dz  } j        |z   } j        |z   } j        r j        } j        r j        } j        rt+          ||          x}} j        } fd}t/                      }|j        }g }|j        } j        }|D ]\  }\  }}| j        ||z           }|j        s$t7          ||z
            }||}} ||          }|j        }|s|rM||z   dz  } | t:          z  }!t=          |!          }"t?          |!          }#|r|t@          k     r|||"z  z   }|||#z  z   }|rtC          ||||||||z  ||z            }$n3|t@          k    rtE          ||||          }$ntC          ||||||          }$|j#        |$_#        |j$        |$_$        |j%        |$_%        |j&        |$_&        |j'        |$_'        |j(        |$_(        |j)        |$_)        |j*        }%|%rG|tW          |j,                  z  }&|&d	k    r)|%d
k    rtZ          j.        ntZ          j/        }%d	ta          |&          z   }&d	|j1        z
  }'|j2        dk    rd	|'z
  tW          |&d	z
            z  }(|'})n|'d	z
  tW          |&d	z
            z  }(d	})||z
  tW          |&          z  }*|j#        }+d |$_#        tg          |&          D ]|},||,|*z  z   }-||,d	z   |*z  z   }. |%|+|)|(|,z  z             }/|rtC          ||||-|.|||z  ||z            }0ntC          ||||-|.|          }0|/|0_#        d |0_$        d|0_%         ||0           } ||$           |
r |
|$|j4        |           |j5        r|s|r|j6        }1||1z  }2||1z  }3||2|"z  z   }4||3|#z  z   }5to           || |4|5|          }6 ||6           |s!|6j8        r|||"z  z   |6_9        |||#z  z   |6_:        |r%|4|5| |2|3|||6;                                ||fd	|6_<        N|r|r||         }6|6r~|6j<        }7|7d         }8|7d         }9|||9z  z   }:|||8z  z   };|j=        }<|:|<|9z  z   }=|;|<|8z  z   }> |t}          |:|;|=|>|6j        |6j        f|j?        |j@                              ||6           |r j        j        }?d}@|D ]f\  }}A j        |         j#        r|@d	z  }@||@z  }B j        |B         j#         j        |         _#         j        |B         j         j        |         _        gtg          d|@d	z
            D ]*}C j        |C         j        |?k    r j        |C         j        }?+|j6        }1||1z  }3t7          |           dk     s| dk    r| dk     sd| cxk     rdk     r#n n d	 jA        z    j        z   j        z   |?z   }4d}2n j         jA         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|||6;                                d|6_<        |6;                                \  }D}E}F}G|r|rt          |||           |D ]}6 ||6           |s|D ]}6|6j8        r?|s= |t          |6j        |6j        |6j9        |6j:        |j?        |j@                             I|r|6;                                \  }D}E}F}G|6j        d	 jA        z    j        z   j        z   k    r |t          |6j9        |6j:        d|6j9        |6j        z   z  |6j        d|G|Ez
  z  z   |j?        |j@                              |t          d|6j9        |6j        z   z  |6j        d|G|Ez
  z  z   |6j        |6j        d|G|Ez
  z  z   |j?        |j@                             3 |t          |6j9        |6j:        d|6j9        |6j        z   z  |6j        d|G|Ez
  z  z   |j?        |j@                              |t          d|6j9        |6j        z   z  |6j        d|G|Ez
  z  z   |6j        |6j        d|G|Ez
  z  z   |j?        |j@                             |S )Nr   r  Fc                     dS Nr{   rC   )r   s    rG   <lambda>z Pie.makeWedges.<locals>.<lambda>  s    B rI   c                 0                         | d          S r  )r   )r   rE   s    rG   r  z Pie.makeWedges.<locals>.<lambda>   s    D..q44 rI   r   )r  radius1yradius1)r  rg   r   r   r   )valuelabel)	r   r   r   r   r   r   r   r   r  r7  r8  )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   ry  r  r  r  r  r  r9  r   r   r   r   r|  r   rx  r   r  r  r   rS   rk   r   r   r   _ANGLEHIr    r   rc   rd   r`   ri   rf   rj   re   r   r   r   r   WhiterBlackerrQ   r   r   r   rp  r   ro   r   r   _aax_aayr   r   r   r&   r   r   r  r  r'   )HrE   r  
halfAnglesr   a1a2	halfAngler   r5   r   r  r  r  rx  r  r  r  r  r  PL_datagSNgg_addr  r  r  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   r9  sinMcosMlXlYlpellXilYislices_popoutrM  r   r   r   r  y1x2y2sH   `                                                                       rG   
makeWedgeszPie.makeWedges  s   ""
 	) 	)IAgr"z		BK	i((((_
KKDK**T---%%
& 	F 	5 %%%fV44BjGjGjGjGgG,CCjnGk#oGfw&Gfw&G|3t|W|3t|W~Cs77/C/CCww $ 64444CGG"6   L	4 L	4IAgr"z8 Qz\2J%/xRUB gB3q66D&F 0v 0 "2s{".w"6O,,O,, 0bkk 6%</B 6%</B" O R"b' '(; ;WM`E`b b b x<<&r2w@@HH$RWb"gNNNH ",!5H#-#9H #-#9H &0&?H#%/%=H"(2(CH%'1'AH$+F 'uZ%<===Q;;.4i.?.?V]]V^FGnG$%j&>$>M!2H<< gai0@0@@,,Qgai0@0@@ rE5>>1D%/D)-H&$W~~ ' '!CH}!SUDL0$fT$S.99. Z&+BGT4QX,34G,GQXYlQl'n 'n 'nGG ',BGT4QX&Y&Y&YG,/).2+./+gE(OOO 78"(6666' C4! B4 %&0&<$[0$[0!#bh!#bh*4\&PZ[[a% 6!*; 6%'%5AF%'%5AF, .17Vl242BR67kkmmrRTg+. +.AK   %G %#AJ %#$;D#'<D#'<D!#gdl!2B!#gdl!2B#-#GD"$tDy.C"$tDy.C!E(Br#c!#ac+B0:0T0:0T#V #V #V W W W "E!HHH !4(,(:(. N NHAu#{1~7 N !Q$%aC;?;q>;SA 88<A8MA 5 5!&q1 F FA#{1~4}DD04A0E&0&<$[0--22s9J9J|]`O`O`fj ,g3 g3 g3 g3.2g3 g3 g3 g3 g3&'(=&=tz%IDF%RUb%bF!"BB%)Vt/Ddj.P%PS`%`F!"B!#bh*4\&PZ[[a% 6%'%5AF%'%5AF, .17Vl242BR67kkmm+. +.AK '(kkmm2b 	E 	EQ
2CDDDDAEE!HHHH 	O O O$ OZ OE$qs13qvaf$.$H$.$HJ J J K K K K   O"#++--KBr"Rsq!66
BTVKKKd16!&afQSj1A!#tRPRU|BT(2(L(2(LN N N O O O d3qs
#3ACr"u4Fqs13PTVXY[V[P\K](2(L(2(LN N N O O O O d16!&afQSj1A!#tRPRU|BT(2(L(2(LN N N O O O d3qs
#3ACr"u4Fqs13PTVXY[V[P\K](2(L(2(LN N N O O O rI   c                 z    |                                  }|                                 }|rt          ||          S |S rB   )makeBackgroundr  r   )rE   rI  r/   s      rG   drawzPie.draw  s:    !!OOU1QZZrI   rC   )F)rZ   r[   r\   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   rw  r   r  r  r  r  r  r  rC   rI   rG   rs  rs  	  sE       w 
 
 
,, 
|O2kllll
3:noooo
 "\(1VWWWW
 !L{O!D!DKkllll	

 d)QRRRR
 $|I  5S  T  T  T  T
 ',x6fuvwwww
 )L??43J3J92U)V)V  ^g  vw  x  x  x  x
 (<d;~(N(NUWfghhhh
 !L1_nopppp
 !Lw{!;!;!LLLL
 ,~4HIIII
 ,~4HIIII
 +l>@fgggg
 #l4.L[\]]]]
  "\)2xyyyy!
" (<  8Q  R  R  R  R#
$  <z 2 29ghhhh%
H( O1 1 18  8M; M; M;^' ' ' '' ' 'R[ [ [z    rI   rs  c                   L   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dS )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)rt  
drawLegendlegend1legendNumberFormatlegendNumberOffsetpieAndLegend_colorslegend_nameslegend_datar   r   r   r   c                    t                               |            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 ]9}| j        j!        "                    | j        |         | j        |         f           :d| j        _#        d | j        _$        || j        _        d!| j        _         |            | _%        d| j%        _        d| j%        _        d| j%        _        d"| j%        _#        d | j%        _$        | j        j        | j%        _        d| _&        d| _'        d| _(        d| _)        d| _*        d S )#Nr   r  )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)+rs  r   r   r   r   r   r9  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11	$"-v|E
$.Jr"RCS$T$T$T$.Js2aDT$U$U$U$.Jr"RCS\^$_$_$_$.Js2aDT]_$`$`$`$.Jr"RCS\^$_$_$_$.Js2aDT]_$`$`$`$b  "&!9!!<A !%!9!!<A !%!9!!<A !%!9!!<A !%!9!!<A !%!9!!<A "&"'"$"*9 	=<<<<<vxxL0"##( %&"!(<<<s49~~&& 	d 	dAL'..0H0KTM^_`Ma/bcccc 0 !#( #& $%!")!4!"$(L$<!rI   c           	      D   | j         rg | j        _        g | j        _        t	          t          | j                            D ]}| j        d k    rJ| j        |         | j	        |         _
        | j        j                            | j        |         d f           n	 | j        |         | j	        |         _
        | j        j                            | j        |         | j        |         f           n# t          $ r | j        |t          | j                  z           | j	        |         _
        | j        j                            | j        |t          | j                  z           | j        |         f           Y nw xY w| j        d k    r| j        |         }| j        }||n[t          |t                     r||z  }n@t#          |d          r ||          }n$t%          dt'          | j                  z            | j        j                            d |f           t(                              |           }| j         r|                    | j                   | j        j        | j        z   | j        _        | j        j        | j        _        | j        j        | j        _        | j        j        | j        _        | j        j        | j        _        | j        j        | j        _        |                    | j                   |                    | j        | j                    |S )N__call__z6Unknown formatter type %s, expected string or function)!r  r  r+  r,  r   r   r9  r  r  r   rc   r   
IndexErrorr  r  
isinstancestrhasattr
ValueErrorasciirs  r  r  r   r  r   r&  r'  r   r)  shiftr   r   )rE   r  ldflNFrR  s        rG   r  zLegendedPie.draw  s   ? 	.*,DL'+-DM(s49~~&& 	@ 	@A D((+/+CA+FA(+22D4LQ4OQU3VWWWWJ/3/G/JDKN,L/668PQR8SUYUfghUi7jkkkk! J J J/3/G#dNfJgJgHg/hDKN,L/668PQRSVW[WoSpSpQp8qsw  tE  FG  tH  8I  J  J  J  J  JJ 4''&q)-;#+C(( @)CCS,, @#c((CC$%]`efjf}`~`~%~,33T#J???HHTNN? 		!EE$,"lnT-DDDMO"lnDMO#'<#6DM #'<#6DM #|DM*.,*DDM'EE$-   	 $"4555s   AC//BE:9E:c                     | j         }| j        r>|| j        j        | j        z   z  }|| 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  si    ? 	Q$,.!888B$-224=3OPPPB+DO;2wrI   c                     |s'|                                  \  }}t          ||          }|                    |                                            |S rB   )r=  r   r  r  )rE   drawingr;  r<  s       rG   r  zLegendedPie.demoA  sK     	&..00EBrb"ooGDIIKK   rI   rB   )rZ   r[   r\   r   r   rs  r   r   r   r   r   r   r   r   r  r=  r  rC   rI   rG   r  r    sK       __wC!\)2WXXX,t*DEEE)\$5rsss)\(9uvvv*l>@hiii#|$?Ffggg"l#>Evwww"l82NOOO#|H3PQQQ!\(1LMMM$X4RSSS
 
 
HA A 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d.S )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                 P   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| _"        d S )Nr   g333333?rg   rd   re   rl   rm   rc   r   rK   r   r   r   )#r`   rE  r   rF  rD  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   rC  rC  I  s         w #
 #
 #
 LB7777#
&,}"====#
 !LB7777#
  <b1111	#

  <b1111#
 #l84444#
 +l84NOOO#
 ',{;;;;#
 *\-R@@@@#
  ,|MrBBBB#
  ,|H"====#
  <b1111#
  <b1111#
 $|N;;;;#
 %^<<<<#
  )L2JKKK!#
" &n"====##
$ *\(3LMMM%#
&  ,|I6WXXX'#
( )LB????)#
* )Lr::::+#
, "\.b9999-#
. (<"====/#
0 (<1HIII1#
2 %Y4VWWWW3#
4 #l>r::::5#
6 #l844447#
8 hB////9#
: ,xR0000;#
< #l=b9999=#
> )LB?????#
@ ','<"EEEEA#
B #l84444C#
D ,y)JKKKE#
HJ& & & & &rI   rC  c                       e Zd Zd Zd ZdS )_SL3Dc                     |dk     r
|dz  }|dz  }|| _         || _        ||z   dz  | _        t          ||z
            t          k     | _        d S )Nr   rM   r   )lohir6  rS   r  not360)rE   rK  rL  s      rG   r   z_SL3D.__init__  sT    a44#IB#IBrE3;"R%jj8+rI   c                 $    d| j         | j        fz  S )Nz_SL3D(%.2f,%.2f))rK  rL  r   s    rG   __str__z_SL3D.__str__  s    !TWTW$555rI   N)rZ   r[   r\   r   rO  rC   rI   rG   rI  rI    s2        , , ,6 6 6 6 6rI   rI  c                 <    t          | d         |d                    S Nr   r-   r<  s     rG   _keyS3DrR    s    !QqTNN?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dS )Pie3dzA flattening parameter.ra   zdepth of the pie.zThe view angle.)rt  perspectivedepth_3dangle_3dF      r:   c                 N    | j         |         j        r| j        |         j        pdS rQ  )_sl3drM  r   rk   )rE   r   s     rG   _popoutzPie3d._popout  s$    z!}#=A(=BBrI   c                     | j         |r| j        pdz   |                     |          t          t	          | j        |         j                            z  z   S rQ  )_cx
_xdepth_3dr\  r   rA  r[  r6  rE   r   ra  s      rG   CXzPie3d.CX  I    x.t3!4T\\!__StzZ[}O`IaIaEbEb5bbbrI   c                     | j         |r| j        pdz   |                     |          t          t	          | j        |         j                            z  z   S rQ  )_cy
_ydepth_3dr\  r   rA  r[  r6  r`  s      rG   CYzPie3d.CY  rb  rI   c                 x    |                      ||          | j        t          t          |                    z  z   S rB   )ra  _radiusxr   rA  rE   r   ora  s       rG   OXzPie3d.OX  ,    wwq||DM#eAhh--777rI   c                 x    |                      ||          | j        t          t          |                    z  z   S rB   )rf  _radiusyr   rA  ri  s       rG   OYzPie3d.OY  rl  rI   c                 v    | j         }t          t          ||z
            t          ||z
  dz                       S )NrM   )_3dvar   rS   )rE   r!  rq  s      rG   rad_distzPie3d.rad_dist  s3    
3qw<<AeGCK 0 0111rI   c                 >   t                               |            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
| _        d S )Nr   rg   rh   r   r  rN   r  i,  r  )g      )@g4@r   g      6@g      @g      2@g      *@)rs  r   r(   rC  r   r   r  rc   r  r  r  azurecrimson
darkvioletr  r  r   r   r9  r   s    rG   r   zPie3d.__init__  s    T-.?@@#)?A #)#4A #);A #);A #)<A #)>A #)#4A &**t|
===			rI   c                 4   |                      |          }||                      | j        |         j                  k     r|                     |d          |                     |d          |                     |d          |                     |d          |                     ||d          |                     ||d          |                     ||d          |                     ||d          g}|                    |t          ||||d          f           d S d S )Nr   rg   rd   rc   r`   ri   )	rr  r[  r6  ra  rf  rk  ro  r   r$   )	rE   r  r   r   rd   r`   rc   rdrR  s	            rG   	_fillSidezPie3d._fillSide  s    ]]5!!dmmDJqM-....1dggall!TWWQq\\%""4771U1#5#5%""4771U1#5#57A HHby]hxyzz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        } j        } j        } j        } j        }t;          |          x _        }g x} _        tA                      }t           j!                  } j"        dk    rdpd}|D ]=}||z  }|||z   }}|}|dk    r||}}|#                    tI          ||                     >tK           j&        |          }|}|d	z   }g }g }g } G  fd
dtN                    } j(        }tS          |          D ]k}||         }|j*        s||         } | j+        x}!}| j,        x}"}t[          |"|!z
            }#|#t\          k     rKt_          |j0        |j1        |j2                  }$t_          |j3        |j4        |j2                  p|$}%|j5        }& |
|d          }' ||d          }( |
|d          }) ||d          }*|rC|6                    to          |)|*||!|"||%|&|$d
  
                   |!|cxk     r|"k     rn n|}|!|cxk     r|"k     rn n|}tq          |%|$|&d          }+|+9                    |)|*||||d           |+:                     |||d           |||d                     |+9                    |'|(||||d           |+;                                 ||k    r	||k    rd},n"ty           ||           ||                    },|#                    |,|+f            ||||!|%|&|$            ||||"|%|&|$           |j0        }$|j3        p|$}%|#                    to          |'|(||!|"||%|&|$d
  
                   |#tz          k    rt}          |'|(|||%|&|$d          }-nto          |'|(||!|"||%|&|$d
  
        }-|#                    |-           ||         }.|j?        r|.r|j@        }/ xj        |/z  c_         xj        |/z  c_        | jA        }0 |||0d          }1 |||0d          }2t           |.|0|1|2||          }3|#                    |3           |r@|1|2|0 j         j         |
|d           ||d          |3C                                d|3_D        | _        | _        m|E                    t                     |r|rt          | jH                   d |D             |z   |z   D ]}4|6                    |4           |S )Nr8   r   r   g      Y@r  r   rg   r   r:   c                   $    e Zd Z j        Zd ZdS ) Pie3d.draw.<locals>.WedgeLabel3dc                     |d         dk    r3t          | d          s%| j        | _        | j         | j        z   | _        d S d S d S )Nr   r5   _ody)r3  r   r  re  rD   s     rG   rH   z*Pie3d.draw.<locals>.WedgeLabel3d._checkDXY  sQ    a5#::"4// ?$(G	#'9*t"> :? ?rI   N)rZ   r[   r\   re  rH   r   s   rG   WedgeLabel3dr}    s+        J? ? ? ? ?rI   r  )r  rd   r`   rc   ri   rx  )r  moveTo)r  r  )rd   r`   rc   ri   )r   r  r-  c                     g | ]
}|d          S rg   rC   )r   r1   s     rG   r   zPie3d.draw.<locals>.<listcomp>O  s    ###A1Q4###rI   )Ir   rW  r   rq  rA  rV  r   r_  r   re  r   r   r^  r   r   rd  r  r  rh  rU  rn  r  r  ra  rf  rk  ro  rr  rz  r   r  r[  r   ru  r$  r   rI  r   r   r@   rx  r   r   rK  rL  rS   r  r@  rc   rD  rE  rd   rF  r`   r  r    r#   addArclineTo	closePathr   r  r   r   ro   r6  r   r   r   r/  rR  r  r   )5rE   r   	_3d_anglerq  a0rV  radiusxradiusyr9  rE  ra  rf  rk  ro  rr  rz  r5   r[  r  lastrj  angle1angle0r   r  rN  rP  r  r  rx  r   r   slrK  rL  r  rc   rd   r`   cx0cy0cx1cy1rR  ry  r  r   ratr6  r   r   r   r   s5   `                                                    rG   r  z
Pie3d.draw  s   M	!)B,///
5\\=b''(*b''(*6$*S.(64;8#== HTVO+'</4<</4<#&)9%)?#?"HH!!##iWWWW=N	 #D		)A
GGDO$$^[(/R41 	/ 	/AGA!1T6FFD!ttffVVLLvf--....DK**s]	? 	? 	? 	? 	? 	? 	?: 	? 	? 	? !2q A	( A	(A1IE=*(qB%B%BRUB({{H"5?53HWWI$U%6u7Nu}]]jajK+K"Qq''C"Qq''C"Qq''C"Qq''C DeCGRG,7KZc/02 2 2 3 3 3 <<<<R<<<<<"<<<<R<<<<<"yU`pqrrrSwaPPPAfQ1VA777SwqQQQ5==VU]]BBXXf--hhv.>.>??B"Q   	!Ab[CCC	!Ab[CCC I+8yKHHU3s72b(3V_opr r r s s s8||"3Wg(3V_opr r r !SBw(3V_opr r rHHX!9D" (t ('$$fAc!Ac! d3vfUl[[[$ &)/Vc*.-dmRTRTUVWXRYRY`b`bcdef`g`g./kkmm#& #&AK !( '	7 	0 	0Qt///#####A%a' 	 	AEE!HHHH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         _        d| j        d         _        d| j        d	         _        d| j        d         _        d| j        d         _        d| j        d         _        |                    |           |S r  )r   rs  r   r   r   r   r9  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  st   CUU	%%%---	!	 	!#$	! ()!u	!$#'	! !'	!!'	!!'!2	!!'	!!'	!!'!2	!!'!1	!!'!2	!!"A!"A!"A!"A!"A	b			rI   N)rZ   r[   r\   r   rs  r   r   r   rU  rV  rW  r\  ra  rf  rk  ro  rr  r   rz  r  r  rC   rI   rG   rT  rT    s       wC"l82KLLL</BCCC</@AAA
 
 
H
 KHHC C Cc c cc c c8 8 88 8 82 2 2> > >} } }} } }~    rI   rT  c                      t          dd          } t                      }d|_        d|_        dg|_        dg|_        d|j        _        |                     |           | S )1Make a degenerated pie chart with only one slice.  r     r  r  r!  rg   )	r   rs  r   r   r9  r   r   r`   r  ra  r  s     rG   sample0ar  u  sZ     	SA	BBDBDdBGBIBIEE"IIIHrI   c                      t          dd          } t                      }d|_        d|_        d|_        d|_        dg|_        dg|_        d	|j        _	        | 
                    |           | S )
r  r  r  r  r  x   r  r  r!  rg   )r   rs  r   r   r   r   r9  r   r   r`   r  r  s     rG   sample0br    sh     	SA	BBDBDBHBIdBGBIBIEE"III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	         _        |                     |           | 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   rs  r   r   r9  r   r   r`   rk   re   ro   r   r  rn   r  r  s     rG   sample1r    s     	SA	BBDBD&&&BG...BIBIBIaL BIaL$%a5BIaL #BIaL#ZBIaLEE"IIIHrI   c                     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         _        |                     |           | S )z"Make a pie chart with nine slices.r  r  }   rY  )	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   rs  r   r   r9  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BI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaL#.BIaL#ZBIaL#0BIaLEE"IIIHrI   c                  v   t          dd          } t                      }d|_        d|_        g d|_        d|_        d|_        d|j        _        t          j
        |j        d         _        t          j        |j        d         _        t          j        |j        d	         _        |                     |           | S )
z(Make a pie chart with a very slim slice.r  r  r  rY  )J   rg   rY  r  rg   r   rh   )r   rs  r   r   r9  r   r   r   r`   r   r  rc   r  r  r  r  s     rG   sample3r    s     	SA	BBDBDkkBGBHBIBI#-BIaL#^BIaL#.BIaLEE"III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	         _        t          j        |j        d
         _        t          j        |j        d         _        t          j        |j        d         _        |                     |           | S )z/Make a pie chart with several very slim slices.r  r  r  rY  r  rg   rg   rg   rg      r  rg   r   rh   r   r  rN   )r   rs  r   r   r9  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BI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"III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         _        |                     |           | S )zMake a pie with side labels.r  r  r  rY  )r"  rg   rg   rg   rg   rh   example1example2example3example4example5example6rg   r  r   rh   r   r  rN   )r   rs  r   r   r9  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XXXBIBMBHBIBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"III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          }|                     |           |                     |           | S )z=Illustrates the pie moving to leave space for the left labelsr  r  r   rY  r  r  rg   r  rh   r   r  rN   )r   rs  r   r   r9  r   r   r   r   r   r`   r   r  rc   r  r  r  r  r  r'   r  )ra  r  r   s      rG   sample6r    s     	SA	B'BDBD"""BGXXXBIBMBHBIBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLQq3AEE"IIIEE!HHHHrI   c                  Z   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         _        |                     |           | S )zCase with overlapping pointersr  r  r  r  r  )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   rs  r   r   r   r   r9  r   r   rx  r   r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample7r  ;  s     	SA	BBDBDBHBIbbbBGk k kBI BMBBO BI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"IIIHrI   c                  N   	 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         _        |                     |           | S )Case with overlapping labelsr  r  r  r  r  )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   rs  r   r   r   r   r9  r   r   rx  r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample8r  ]  s     eSA	BBDBDBHBIAAABG* * *BI BMBBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"IIIHrI   c                  N   	 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         _        |                     |           | S )r  r  r  r  r  ))   r  r     r  r   r  r  rY  #   rY  r  r   r  r  r   r  rg   r  r   rh   r   r  rN   )r   rs  r   r   r9  r   r   rx  r   r   r   r`   r   r  rc   r  r  r  r  r  r  r  s     rG   sample9r  }  s     _SA	BBDBDNNNBG* * *BI BMBBHBIBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"IIIHrI   __main__)	renderPDFr  samplezsample%sz%s.pdfrB   r  )Fr   )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_keyr1  r:  r=  r?  r^  rk  r   rm  rs  r  !reportlab.graphics.charts.utils3dr@  rA  r   r   rC  rI  rR  _270rrT  r  r  r  r  r  r  r  r  r  r  r  rZ   sysreportlab.graphicsr  argvr!  
startswithnameglobalsr?  
drawToFilerC   rI   rG   <module>r     sD   	                          @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ H G G G G G G G # # # # E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E  E M M M M M M M M 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6      DSd3UY`dee Tct$CVZaeff h       Z) Z) Z) Z) Z)j Z) Z) Z)x< < < <|      x   6o o o      G G G GR  
. . .$ $ $
)
w
'
'     D8 8 8		f	%	%  D" D" D" D"L  2       q q q q q
 q q qfJ J J J J# J J JX O N N N N N N N N N N NE& E& E& E& E&
 E& E& E&N6 6 6 6 6 6 6 6  
)
w
'
'c

P P P P PC P P Pf  "  &  .  @  .  2  6  @     D  @  @ Z
 JJJ,,,,,,8ABB< C5D 7 7LL**>qq
Q!''))D/##	Who6666 7 7rI   