
    "di             
       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>g     v@c                       e Zd Zd Zd ZdS )
WedgeLabelc                     d S N selfbas     b/var/www/html/pixcura-vrs/venv/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_ANGLE2BOXANCHORrG   )rD   rE   nadas       rF   _getBoxAnchorzWedgeLabel._getBoxAnchor.   s    ^"""ty}c)**2-s2BG /i"n+r771992a4;B-#.B$wt,,B1BVFVXZ[BNN2	rH   N)__name__
__module____qualname__rG   rX   rB   rH   rF   r?   r?   +   s2          
 
 
 
 
rH   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') ...ra   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   rc   rd   rf   rk   rl   rb   333333?rJ         ?皙?start   rg   g@߾ @r   ).r_   rb   r"   rc   rd   rh   re   ri   rj   rk   rl   rm   rn   ro   rp   rq   rx   r   r   r   r   rr   rs   rt   ru   rv   rw   ry   r{   r|   r}   r~   r   r   r   blackr   r   r   r   r   r   r   r   r   r   rD   s    rF   __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 '$%!)/&),&)*&%&"$%! " (rH   rB   )rY   rZ   r[   __doc__AttrMapAttrMapValuer   r
   r   r   r   r   r   r   r   r   r   r   _attrMapr   rB   rH   rF   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^#) #) #) #) #)rH   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
textAnchorrR   rQ   _simple_pointerrS   r?   xyro   dxrp   dyrr   rO   rl   rq   anglers   boxStrokeColorrt   boxStrokeWidthru   boxFillColorrv   rc   rw   r_   rx   _textry   leadingr{   widthr|   maxWidthr}   heightr~   r   r   r   
topPaddingr   leftPaddingr   rightPaddingr   bottomPaddingr   rk   rm   rb   )
rD   textr   labelXlabelY
wedgeStyler   theLabelsideLabels_dyr   s
             rF   _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OrH   c                 t    | dg|z  } n.|t          |           z
  }|dk    rt          |           dg|z  z   } | S )Nrz   r   )lenlist)labelsr5   is      rF   
_fixLabelsr      sF    ~c&kkMQ33frd1f,MrH   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 )Nrc   rb   rd   r_   r          @)r_   rc   rd   rb   )slicesr   rS   r   r%   )rD   rowNor   r   r   r   	baseStylestyleIdxstylerc   rb   rd   r_   r   s                 rF   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rH   Nc                     	 t          | j        |                   }n	#  |}Y nxY w| j        s t          | j        |         dd          }||}|S )zreturn series name i or defaultrx   rz   )r+   r   r   rS   r   )rD   r   defaultr   r   s        rF   getSeriesNamezAbstractPieChart.getSeriesName   s_    	4;q>**DD	DDD  	/DKN<;;E $s    #rA   )rY   rZ   r[   r   r   rB   rH   rF   r   r      s:        I I I	 	 	 	 	 	rH   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   rg   g{Gz?rf   r   r   rB   )PQs     rF   boundsOverlapr      s    tAaDI~m1ad4im1Q4ad1Q4i$8N3NmRSTURVX[]^_`]abcdebf]fXgimWmRmnnrH   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]rf   r   )r   r   appendinsert)Br   wrapr5   Rjs         rF   _findOverlapRunr      s    AA	
AbEqS!G66qtAaD1165		
aDqS!G66qtAaD1165	1	
 HrH   rf   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 Nonerf   N)r   ranger   )r   r   r5   r   r   s        rF   findOverlapRunr   
  s^    AAssqs 	" 	"A!D))A1vvaxxx4rH   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 )Nrg   c                 (    g | ]}|j         d          S )bounds)	_origdata).0ls     rF   
<listcomp>z$fixLabelOverlaps.<locals>.<listcomp>  s    ***1X	***rH   rf   r      c                     g | ]}|v |	S rB   rB   )r   rr   s     rF   r   z$fixLabelOverlaps.<locals>.<listcomp>#  s    ,,,!Q!VVAVVVrH   r   cxrxcyryg?r   r   r   )r   floatr   _360rQ   maxminrR   r   _180_pir   r   r   r   	getBounds	enumerate) Lr   mult0nLr   OKRPitermultnRrW   r0rLbitaaaar   butaantaar   origr   radl1orig1bounds1r   r   diff1diff2r   s                                   @rF   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 2ggggggrH   c                     t          t          |           t          |                    t          t          |           t          |                    }}||k    rd S ||fS rA   )r   r   )Ar   r   r   s       rF   intervalIntersectionr  \  sM    
c!ffSVV

SQA//aA!ttDDQ3JrH   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 )NrL   r8   r<   	clockwiser   )rf   r8   ir  )rf   r<   r   r   rf   c                 6    g | ]}|d          |d         k     |S )rf   rg   rB   r   as     rF   r   z$_makeSideArcDefs.<locals>.<listcomp>n  s%    ,,,!A$qt))!)))rH   )tuple)sa	directionr   offss       rF   _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,,,---rH   c                 ^    t          |d         |d         z
  | d         | d         z
            S )Nrf   r   r-   )r   r   s     rF   _keyFLAr'  p  s*    qtAaDy1ad###rH   c                     fd| D             }|sd S t          |          dk    r|                    t                     |d         S )Nc                 H    g | ]}|d          k    |d         |d         S r   rf   rB   )r   r   sides     rF   r   z#_findLargestArc.<locals>.<listcomp>u  s2    @@@!!d

qt/?1/?/?/?rH   rf   keyr   )r   sortr'  )xArcsr+  r   s    ` rF   _findLargestArcr0  t  sQ    @@@@u@@@ATT
1vvaxxG$$$Q4KrH   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rirf   r   r   edgePadr:   r   midsmidcmidr+  )r   rQ   r   r   r   r   )
r   r   r+  datar2  r3  r   r/   r4  r5  s
             rF   _fPLSider9  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6MrH   c                 N    t          |j        d         | j        d                   S )Nr6  )r.   r   r   r  s     rF   _fPLCFr<    s     q{6"1;v#6777rH   c                     | d         S )Nrf   rB   )r   s    rF   _arcCFr>    s    Q4KrH   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   rf   r   r*  r,  r   indexr6  r   r   rg   r4  piePadelbowLengthr   )r   r   c                 0    g | ]}|d          |d         z
  S )r   rf   rB   )r   r  s     rF   r   z%_fixPointerLabels.<locals>.<listcomp>  s$    9991QqT!A$Y999rH   )r9  r   r   r.  r<  r   r   r   rR   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yhr8  inclyr  b2r  nTr   r  j0j1jlsAbovesFreesNeedr   s)                                            rF   _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!!rH   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 )Nrg   c                     g | ]}|z  S rB   rB   )r   dfacs     rF   r   ztheta0.<locals>.<listcomp>  s       aAcE   rH   r   r   g    .Ag      B@$   c                 N    g | ]!}t          t          |z                       "S rB   )rR   r   )r   r   r   s     rF   r   ztheta0.<locals>.<listcomp>  s)    ...1S1XX...rH   r  r:   )r   rD  r   r   r   )r8  r#  radsr  hradsvstarrstardeltar   vra  r   s             @@rF   theta0rj    s   R4T
C    4   D	
BE  R#X
aIIcMEEtGE2YY  eG.......//u99K''bE9R<rH   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 rA   )r   __new___data)clsr   r8  rD   s       rF   rn  zAngleData.__new__  s!    }}S''
rH   N)rY   rZ   r[   r   rn  rB   rH   rF   rl  rl    s)        99    rH   rl  c                      e Zd Z ed;i ded eed          d eed          d eed          d	 e e	d
d          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          d1 eed2          ZdZd3 Zd4 Zd5 Zd<d7Zd8 Zd9 Zd: ZdS )=PieBASEr8  z7List of numbers defining wedge sizes; need not sum to 1r`   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.rf   r   checkLabelOverlapg?zFIf true check and attempt to fix
 standard label overlaps(default off)pointerLabelMode	LeftRightLeftAndRightrz   	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 labels
angleRangez3total degree range for the doughnut defaults to 360c           
         t          j        |            t          | d|                    dd                     t          | d|                    dd                     t          | d|                    dd                     t          | d|                    dd                     t          | d|                    dg d                     t          | d	|                    d	d                      t          | d
|                    d
d                     t          | d|                    dd                     t          | d|                    dd                     t          | d|                    dd                     t          | d|                    dd                      t          | d|                    dd                     t          | d|                    dd                     t          | d|                    dd                      t          | d|                    dd                      t          | d|                    dd                      t          | d|                    dd                     t          | d|                    dd                     t          | d|                    dt	          t
                                         t          | d|                    d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 S )$Nr   r   r   r   d   r   r8  )rf   gffffff@g333333?g@r   rt  r8   r#  r  r   rf   rw  rx  r{  Fr|  r}  r  r  r  r   r  r   r   r  rL   rg   r      rM      )r*   r   setattrpopr(   r]   r   darkcyanr   rb   
bluevioletbluecyanpinkmagentayellow)rD   kwdss     rF   r   zPie.__init__!  s   $S#a)))S#a)))WTXXgc22333Xdhhx44555VDHHVOOO<<===Xdhhx55666\$((<";";<<<[+k!B!BCCC^DHH^A$>$>???(2Ea)H)HIII'1CD(I(IJJJ[+e!<!<===[+g!>!>???Ytxx	$77888Ytxx	$77888*4884I$+O+OPPP\$((<":":;;;'1CC(H(HIIIXdhhx0G0X0XYYZZZ\$((<"<"<===#)?A #)#4A #);A #);A #);A #)>A #)=A   rH   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  cr`  r3   fr   r   rg         ?r   rf   r  rM   r  )r   rr  r   r   r   r   r8  r   r   r_   rj   rd   rn   r   redrm   r  rb   r  r  r  
aquamarine	cadetblue
lightcoraladdrD   r`  pcs      rF   demozPie.demo@  s.   CUU	%%%---	!	 	!#$	! ()!u	!$#'	! !'	!!'	!!'!2	!!'	!!'	!!'!2	!!'!1	!!'!2	!	b			rH   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 rA   )centerxcenteryr  r  r8  luru)rD   r  r  r  r  r8  r  r  s           rF   r   z*Pie.makePointerLabels.<locals>.PL.__init__^  s7    &&&& 	rH   N)r   r   )rY   rZ   r[   r   rB   rH   rF   PLr  ]  s(             rH   r  rg   r   rf   rz   r:   r   c           	      \    g | ](}|d          t          |d         |d         f          f)S )r   rf   rg   )r  )r   r   r  s     rF   r   z)Pie.makePointerLabels.<locals>.<listcomp>z  s9    NNN1Q4,Q!QqT{;;<NNNrH   rz  g{Gz?)	r   r   r   r2  r3  r@  r4  rA  rB  r   )r+  )r   r   r   r   r   r%  rt  r#  r   r   r   r   r   r0  dictr   r   r   r   r   r   r   r  r  r{  r   rP   r]  )%rD   anglesplModer  r   r   r5   nrnlmaxWsumH
styleCountr   L_addrefArcsr   snr   r   r  r/   hr3  r2  r  r  r  r  aonRr+  rH  r  r  rI  x0x1r  s%                                       @rF   makePointerLabelszPie.makePointerLabels\  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:::rH   Fc                    t          t          t          | j                            }t	          t          |                    x}| _        |dk    rt          d| j                  |z  nd|rfd|D             S fd|D             S )Nr   rL   rf   c                 6    g | ]}t          |z  |          S rB   )rl  r   r   r  s     rF   r   z%Pie.normalizeData.<locals>.<listcomp>  s'    333Iac!$$333rH   c                     g | ]}|z  S rB   rB   r  s     rF   r   z%Pie.normalizeData.<locals>.<listcomp>  s    &&&AAaC&&&rH   )	r   maprR   r8  r   rD  _sumr   r  )rD   keepDatar8  r1   r  s       @rF   normalizeDatazPie.normalizeData  s    CDI&&''c$ii(((DI*+Q$$CDO$$Q&&A 	'3333d3333&&&&&&&&rH   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  rf   rL   r  r   c                     g | ]}|S rB   rB   r  s     rF   r   z"Pie.makeAngles.<locals>.<listcomp>  s    CCC1QCCCrH   )r  r~  c                 D    g | ]}t          |d                    dk    |S rf   gh㈵>rR   r  s     rF   r   z"Pie.makeAngles.<locals>.<listcomp>  s'    111qQqTDrH   r,  r   rg   r  c                 D    g | ]}t          |d                    dk     |S r  r  r  s     rF   r   z"Pie.makeAngles.<locals>.<listcomp>  s'    <<<1S1YYt^^Q^^^rH   )rS   r   rj  r8  r#  r   r   rt  r   r  r|  r.  r>  r  r   reverserR   _ANGLELOrl  ro  )rD   wrrt  whichWayDWrM  r   r   r  r   endAngler  s                rF   
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rH   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 Nrz   rB   )r   s    rF   <lambda>z Pie.makeWedges.<locals>.<lambda>  s    B rH   c                 0                         | d          S r  )r   )r   rD   s    rF   r  z Pie.makeWedges.<locals>.<lambda>  s    D..q44 rH   r   )r  radius1yradius1)r  rf   r   r   r   )valuelabel)	r   r   r   r   r   r   r   r   r  r6  r7  )r_   rc   r8   r<   r   r   r   r   r   r   r   r   r   r   r   )r  g      ?)Dr  r   r   r   r   r   rS   _seriesCountr   rx  r  r  r  r  r  r8  r   r   r   r   r{  r   rw  r   r  r  r   rR   rj   r   r   r   _ANGLEHIr    r   rb   rc   r_   rh   re   ri   rd   r   r   r   r   WhiterBlackerrP   r   r   r   ro  r   rn   r   r   _aax_aayr   r   r   r&   r   r   r  r  r'   )HrD   r  
halfAnglesr   a1a2	halfAngler   r5   r   r  r  r  rw  r  r  r  r  r  PL_datagSNgg_addr   r  r  r   r  r   r   r   rj   averageAngleaveAngleRadianscosAAsinAAtheWedgeshadernshadesr   dshshf1shdashscishsha1sha2shcshWedgern   r   r   r   r   r   r8  sinMcosMlXlYlpellXilYislices_popoutrL  r   r   r   r  y1x2y2sH   `                                                                       rF   
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 rH   c                 z    |                                  }|                                 }|rt          ||          S |S rA   )makeBackgroundr  r   )rD   rH  r/   s      rF   drawzPie.draw  s:    !!OOU1QZZrH   rB   )F)rY   rZ   r[   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   rv  r   r  r  r  r  r  r  rB   rH   rF   rr  rr  	  sb       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%
& "\(1fgggg'
H* O1 1 1>  8M; M; M;^' ' ' '' ' 'R[ [ [z    rH   rr  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 legendr`   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)rs  
drawLegendlegend1legendNumberFormatlegendNumberOffsetpieAndLegend_colorslegend_nameslegend_datar   r   r   r   c                    t          | d|                    dg d                     t          j        | fi | 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 )#Nr8  )g333333C@g333334@gfffff2@g.@gffffff@   H   r   zPANTONE 458 CV)spotNamer  A   r   zPANTONE 288 CVK   )r  densityr  rf   rg   r   r  rM   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)+r  r  rr  r   r   
PCMYKColorr   r  r   rb   r_   rc   r  r  r8  r  !reportlab.graphics.charts.legendsr"  r  r   r   r   r   deltaxdeltaydxTextSpacer   r   columnMaximum	alignmentr  r   r   colorNamePairsr   rk   rl   _legend2r   r   r   r   r  )rD   r  r%  r   legendOffsetr"  r  s          rF   r   zLegendedPie.__init__  s6   VDHHV,I,I,IJJKKKT!!D!!!"-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$<!rH   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   r8  r  r  r   rb   r   
IndexErrorr  r  
isinstancestrhasattr
ValueErrorasciirr  r  r  r   r  r   r'  r(  r   r*  shiftr   r   )rD   r  ldflNFrQ  s        rF   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 rA   )r   r  r  r   r  r-  _calculateMaxWidthr,  r   r   r   )rD   txtys      rF   _getDrawingDimensionsz!LegendedPie._getDrawingDimensions7  si    ? 	Q$,.!888B$-224=3OPPPB+DO;2wrH   c                     |s'|                                  \  }}t          ||          }|                    |                                            |S rA   )r>  r   r  r  )rD   drawingr<  r=  s       rF   r  zLegendedPie.demo?  sK     	&..00EBrb"ooGDIIKK   rH   rA   )rY   rZ   r[   r   r   rr  r   r   r   r   r   r   r   r   r  r>  r  rB   rH   rF   r  r    sH       __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; ; ;z' ' 'R       rH   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^   rb   rz   r`   fillColorShadedrm   rk   rl   rq   r   zpadding at bottom of boxrr   ru   rs   rt   ro   rp   r}   ry   r   zpadding at left of boxr|   r   zpadding at right of boxr   zset to True for simple pointersrv   rw   rx   r~   r   zpadding at top of boxr   r   r{   rn   rj   shadingrc   strokeColorShadedrd   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?rf   rc   rd   rk   rl   rb   r   rJ   r   r   r   )#r_   rF  r   rG  rE  rb   r"   rc   rd   rj   rk   rl   rm   rn   ro   rp   rq   rx   r   r   r   r   rr   rs   rt   ru   rv   rw   ry   r{   r|   r}   r~   r   r   r   s    rF   r   zWedge3dProperties.__init__t  s)   IMMM!5)-8-.?@&z2&z2'4;<<<(8nooo 6o9PSWSk&$(!$'!"&!%!$]aaa 0a43FIZ '$%!!!rH   NrB   )rY   rZ   r[   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   rB   rH   rF   rD  rD  G  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& & & & &rH   rD  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   rL   r   )lohir5  rR   r  not360)rD   rL  rM  s      rF   r   z_SL3D.__init__  sT    a44#IB#IBrE3;"R%jj8+rH   c                 $    d| j         | j        fz  S )Nz_SL3D(%.2f,%.2f))rL  rM  r   s    rF   __str__z_SL3D.__str__  s    !TWTW$555rH   N)rY   rZ   r[   r   rP  rB   rH   rF   rJ  rJ    s2        , , ,6 6 6 6 6rH   rJ  c                 <    t          | d         |d                    S Nr   r-   r;  s     rF   _keyS3DrS    s    !QqTNN?rH   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.r`   zdepth of the pie.zThe view angle.)rs  perspectivedepth_3dangle_3dF      r:   c                 N    | j         |         j        r| j        |         j        pdS rR  )_sl3drN  r   rj   )rD   r   s     rF   _popoutzPie3d._popout  s$    z!}#=A(=BBrH   c                     | j         |r| j        pdz   |                     |          t          t	          | j        |         j                            z  z   S rR  )_cx
_xdepth_3dr]  r   rB  r\  r5  rD   r   r`  s      rF   CXzPie3d.CX  I    x.t3!4T\\!__StzZ[}O`IaIaEbEb5bbbrH   c                     | j         |r| j        pdz   |                     |          t          t	          | j        |         j                            z  z   S rR  )_cy
_ydepth_3dr]  r   rB  r\  r5  ra  s      rF   CYzPie3d.CY  rc  rH   c                 x    |                      ||          | j        t          t          |                    z  z   S rA   )rb  _radiusxr   rB  rD   r   or`  s       rF   OXzPie3d.OX  ,    wwq||DM#eAhh--777rH   c                 x    |                      ||          | j        t          t          |                    z  z   S rA   )rg  _radiusyr   rB  rj  s       rF   OYzPie3d.OY  rm  rH   c                 v    | j         }t          t          ||z
            t          ||z
  dz                       S )NrL   )_3dvar   rR   )rD   r   rr  s      rF   rad_distzPie3d.rad_dist  s3    
3qw<<AeGCK 0 0111rH   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   rf   rg   r   r  rM   r  i,  r  )g      )@g4@r   g      6@g      @g      2@g      *@)rr  r   r(   rD  r   r   r  rb   r  r  r  azurecrimson
darkvioletr  r  r   r   r8  r   s    rF   r   zPie3d.__init__  s    T-.?@@#)?A #)#4A #);A #);A #)<A #)>A #)#4A &**t|
===			rH   c                 4   |                      |          }||                      | j        |         j                  k     r|                     |d          |                     |d          |                     |d          |                     |d          |                     ||d          |                     ||d          |                     ||d          |                     ||d          g}|                    |t          ||||d          f           d S d S )Nr   rf   rc   rb   r_   rh   )	rs  r\  r5  rb  rg  rl  rp  r   r$   )	rD   r   r   r   rc   r_   rb   rdrQ  s	            rF   	_fillSidezPie3d._fillSide  s    ]]5!!dmmDJqM-....1dggall!TWWQq\\%""4771U1#5#5%""4771U1#5#57A HHby]hxyzzz{||||| /.rH   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   rf   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)r4  r   r  rf  rC   s     rF   rG   z*Pie3d.draw.<locals>.WedgeLabel3d._checkDXY  sQ    a5#::"4// ?$(G	#'9*t"> :? ?rH   N)rY   rZ   r[   rf  rG   r   s   rF   WedgeLabel3dr~    s+        J? ? ? ? ?rH   r  )r  rc   r_   rb   rh   ry  )r  moveTo)r  r  )rc   r_   rb   rh   )r   r  r,  c                     g | ]
}|d          S rf   rB   )r   r1   s     rF   r   zPie3d.draw.<locals>.<listcomp>M  s    ###A1Q4###rH   )Ir   rX  r   rr  rB  rW  r   r`  r   rf  r   r   r_  r   r   re  r  r  ri  rV  ro  r  r  rb  rg  rl  rp  rs  r{  r   r  r\  r   rt  r#  r   rJ  r   r   r?   rw  r   r   rL  rM  rR   r  rA  rb   rE  rF  rc   rG  r_   r  r    r#   addArclineTo	closePathr   r  r   r   rn   r5  r   r   r   r.  rS  r  r   )5rD   r   	_3d_anglerr  a0rW  radiusxradiusyr8  rD  rb  rg  rl  rp  rs  r{  r5   r\  r  lastri  angle1angle0r   r  rM  rO  r   r  rw  r   r   slrL  rM  r  rb   rc   r_   cx0cy0cx1cy1rQ  rz  r  r   ratr5  r   r   r   r   s5   `                                                    rF   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rH   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   rr  r   r   r   r   r8  r   r   r_   rj   rd   rn   r   r  rm   r  rb   r  r  r  r  r  r  r   r  r  s      rF   r  z
Pie3d.demoQ  st   CUU	%%%---	!	 	!#$	! ()!u	!$#'	! !'	!!'	!!'!2	!!'	!!'	!!'!2	!!'!1	!!'!2	!!"A!"A!"A!"A!"A	b			rH   N)rY   rZ   r[   r   rr  r   r   r   rV  rW  rX  r]  rb  rg  rl  rp  rs  r   r{  r  r  rB   rH   rF   rU  rU    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> > >} } }} } }~    rH   rU  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   rf   )	r   rr  r   r   r8  r   r   r_   r  r`  r  s     rF   sample0ar  s  sZ     	SA	BBDBDdBGBIBIEE"IIIHrH   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   rf   )r   rr  r   r   r   r   r8  r   r   r_   r  r  s     rF   sample0br    sh     	SA	BBDBDBHBIdBGBIBIEE"IIIHrH   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  rf   r  r   rg   r  )r   rr  r   r   r8  r   r   r_   rj   rd   rn   r   r  rm   r  r  s     rF   sample1r    s     	SA	BBDBD&&&BG...BIBIBIaL BIaL$%a5BIaL #BIaL#ZBIaLEE"IIIHrH   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  }   rZ  )	gףp=
?gl?gS㥻?g~jt?gL7A`?gQ?g~jt?gT㥛 ?g333333?)	12345678Xr  rf   r   rg   r   r  rM   r  r#     )r   rr  r   r   r8  r   r   r   r   r_   r   	steelbluerb   thistle
cornflowerlightsteelbluer  r  r  tandarkseagreenr  r  s     rF   sample2r    s    	SA	BBDBD# # #BG >==BIBHBIBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaL#.BIaL#ZBIaL#0BIaLEE"IIIHrH   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  rZ  )J   rf   rZ  r  rf   r   rg   )r   rr  r   r   r8  r   r   r   r_   r   r  rb   r  r  r  r  s     rF   sample3r    s     	SA	BBDBDkkBGBHBIBI#-BIaL#^BIaL#.BIaLEE"IIIHrH   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  rZ  r  rf   rf   rf   rf      r  rf   r   rg   r   r  rM   )r   rr  r   r   r8  r   r   r   r_   r   r  rb   r  r  r  r  r  r  r  s     rF   sample4r    s     	SA	BBDBD"""BGBHBIBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"IIIHrH   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  rZ  )r#  rf   rf   rf   rf   rg   example1example2example3example4example5example6rf   r  r   rg   r   r  rM   )r   rr  r   r   r8  r   r   r   r   r   r_   r   r  rb   r  r  r  r  r  r  r  s     rF   sample5r    s     	SA	BBDBD   BGXXXBIBMBHBIBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"IIIHrH   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   rZ  r  r  rf   r  rg   r   r  rM   )r   rr  r   r   r8  r   r   r   r   r   r_   r   r  rb   r  r  r  r  r  r'   r  )r`  r  r   s      rF   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HrH   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  )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )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	example28rf   r   rg   r   r  rM   )r   rr  r   r   r   r   r8  r   r   rw  r   r   r_   r   r  rb   r  r  r  r  r  r  r  s     rF   sample7r  9  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HrH   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  )rf   rf   rf   rf   rf   r   r  rf   rf   rf   rf   rf   rf   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rf   r   rg   r   r  rM   )r   rr  r   r   r   r   r8  r   r   rw  r   r_   r   r  rb   r  r  r  r  r  r  r  s     rF   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HrH   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  rZ  #   rZ  r  r   r  r  r   r  rf   r  r   rg   r   r  rM   )r   rr  r   r   r8  r   r   rw  r   r   r   r_   r   r  rb   r  r  r  r  r  r  r  s     rF   sample9r  {  s     _SA	BBDBDNNNBG* * *BI BMBBHBIBI#-BIaL#^BIaL#.BIaL#2BIaL#.BIaL#-BIaLEE"IIIHrH   __main__)	renderPDFr  samplezsample%sz%s.pdfrA   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.   rU   rT   r  r  r?   r]   r   r   r   r   r   r   r  r  r%  r'  
cmp_to_keyr0  r9  r<  r>  r]  rj  r   rl  rr  r  !reportlab.graphics.charts.utils3drA  rB  r   r   rD  rJ  rS  _270rrU  r  r  r  r  r  r  r  r  r  r  r  rY   sysreportlab.graphicsr  argvr   
startswithnameglobalsr@  
drawToFilerB   rH   rF   <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       u u u u u
 u u unD D D D D# D D DL 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 7rH   