o
    ¬+ Z×i  ã                   @   sÚ  d Z dZddlZddl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 ddlT ddlmZmZ ddlmZmZmZ dd	lm Z m!Z!m"Z"m#Z#m$Z$m%Z% dd
l&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z- ddlm.Z. ddl/m0Z0 ddl1m2Z2 dd„ Z3dd„ Z4dd„ Z5dd„ Z6dd„ Z7dd„ Z8G dd„ deƒZ9G dd„ dƒZ:G d d!„ d!e:ƒZ;G d"d#„ d#e:ƒZ<G d$d%„ d%eƒZ=G d&d'„ d'e<ƒZ>G d(d)„ d)eƒZ?G d*d+„ d+e=ƒZ@d,d-„ ZAd.d/„ ZBd0d1„ ZCd2d3„ ZDdS )4z3.3.0z<This will be a collection of legends to be used with charts.é    N)Úcolors)ÚisNumberÚOneOfÚisStringÚisColorOrNoneÚisNumberOrNoneÚisListOfNumbersOrNoneÚisStringOrNoneÚ	isBooleanÚEitherOrÚNoneOrÚAutoOrÚisAutoÚAutoÚisBoxAnchorÚ
SequenceOfÚisInstanceOf)Ú*)ÚstringWidthÚgetFont)ÚWidgetÚTypedPropertyCollectionÚ
PropHolder)ÚDrawingÚGroupÚStringÚRectÚLineÚSTATE_DEFAULTS)ÚPlotArea)ÚuSymbol2SymbolÚisSymbol)ÚisSeqÚfind_locals)Ú_baseGFontName)Úreduce)Úxrangec                 C   s†   | dg }d}|D ]}t |t|ƒƒ}t|ƒD ]\}}t || |ƒ||< qq	dg|d |…  }t|ƒD ]}||d   || 7  < q2|S )Nr   é   )ÚmaxÚlenÚ	enumerateÚrange)ÚnÚAÚXÚmÚaÚiÚx© r3   úS/var/www/html/env/lib/python3.10/site-packages/reportlab/graphics/charts/legends.pyÚ	_transMax   s   
ÿr5   c                 C   s   t | tƒr| S t| ƒS ©N)Ú
isinstanceÚstr©Úsr3   r3   r4   Ú_objStr%   s   
r;   c                 C   s   t | ƒrttt| ƒƒS t| ƒS r6   )r"   ÚlistÚmapÚ_getStrr;   r9   r3   r3   r4   r>   +   s   r>   c                 C   s(   t | ƒrtdd„ | D ƒƒS | pd d¡S )Nc                 S   s   g | ]	}|pd   d¡‘qS )Ú Ú
)Úsplit©Ú.0r2   r3   r3   r4   Ú
<listcomp>3   ó    z_getLines.<locals>.<listcomp>r?   r@   )r"   ÚtuplerA   r9   r3   r3   r4   Ú	_getLines1   s   rG   c                 C   s*   t | ƒ}t| ƒrtdd„ |D ƒƒS t|ƒS )Nc                 S   ó   g | ]}t |ƒ‘qS r3   ©r)   rB   r3   r3   r4   rD   :   ó    z!_getLineCount.<locals>.<listcomp>)rG   r"   r(   r)   )r:   ÚTr3   r3   r4   Ú_getLineCount7   s   rL   c                    sô   g }|j }t|ƒrKt|ƒD ]8\}}||| f }	t|	d|ƒ‰ t|	d|ƒ‰‡ ‡fdd„| d¡D ƒ}
t|	j|
r9t|
ƒp:dƒ}
||
ƒ ||	jƒ q|d= |S |d| f }	t|	d|ƒ‰ t|	d|ƒ‰‡ ‡fdd„| d¡D ƒ}
|t|	j|
rtt|
ƒpudƒƒ |S )	NÚfontNameÚfontSizec                    ó   g | ]}t |ˆ ˆƒ‘qS r3   ©r   rB   ©ÚfNÚfSr3   r4   rD   F   ó    z_getWidths.<locals>.<listcomp>r@   r   éÿÿÿÿc                    rO   r3   rP   rB   rQ   r3   r4   rD   O   rT   )Úappendr"   r*   ÚgetattrrA   r(   ÚminWidthÚrpad)r1   r:   rM   rN   ÚsubColsÚSÚaSÚjÚtÚscr/   r3   rQ   r4   Ú
_getWidths>   s&   ûr`   c                   @   sÒ   e Zd ZdZeeedd�eedd�eeddddd	ƒd
d�eedd�eedd�eedd�ee	dd�ee
eeeƒƒeeeƒdddd�fƒdd�ee
eeeƒƒeeeƒdddd�fƒdd�eedd�eedd�d�ZdS )ÚSubColPropertyr   zminimum width for this subcol©Údesczright padding for this subcolÚleftÚrightÚcenterÚcentreÚnumericzalignment in subColúFont name of the stringsúFont size of the stringszleading for the stringsÚ	fontColoriÿÿÿ©ÚemptyOKÚloÚhizunderline definitionszoverline definitionszx offset from default positionzy offset from default position)rX   rY   ÚalignrM   rN   ÚleadingÚ	fillColorÚ
underlinesÚ	overlinesÚdxÚdyN)Ú__name__Ú
__module__Ú__qualname__ÚdividerLinesÚAttrMapÚAttrMapValuer   r   r   r   r   r   r   r   r   Ú_attrMapr3   r3   r3   r4   ra   S   s    





**


õra   c                   @   s,   e Zd Zdd„ ZeeƒZdd„ Zdd„ ZdS )ÚLegendCalloutc                    s&   t ‡fdd„ƒ‰ t‡ fdd„|D ƒƒS )zZreturn a tuple of values from the first function up the stack with isinstance(self,legend)c                    ó   |   dd ¡ˆ u r
| pd S ©NÚself©Úget©ÚL©Úlegendr3   r4   Ú<lambda>f   rT   z-LegendCallout._legendValues.<locals>.<lambda>c                    s   g | ]}ˆ | ‘qS r3   r3   ©rC   r0   r„   r3   r4   rD   g   rJ   z/LegendCallout._legendValues.<locals>.<listcomp>©r#   rF   )r‡   Úargsr3   )r…   r‡   r4   Ú_legendValuesd   s   zLegendCallout._legendValuesc                    s(   t ‡fdd„ƒ‰ t‡ ‡fdd„|D ƒƒS )Nc                    r   r€   r‚   r„   r†   r3   r4   rˆ   k   rT   z3LegendCallout._selfOrLegendValues.<locals>.<lambda>c                    s   g | ]
}t ˆ|ˆ | ƒ‘qS r3   )rW   r‰   )r…   r�   r3   r4   rD   l   ó    z5LegendCallout._selfOrLegendValues.<locals>.<listcomp>rŠ   )r�   r‡   r‹   r3   )r…   r‡   r�   r4   Ú_selfOrLegendValuesj   s   z!LegendCallout._selfOrLegendValuesc                 C   s   |\}}d S r6   r3   )r�   r‡   ÚgÚthisxÚyÚcolNameÚcolÚnamer3   r3   r4   Ú__call__n   ó   zLegendCallout.__call__N)rw   rx   ry   rŒ   ÚstaticmethodrŽ   r•   r3   r3   r3   r4   r~   c   s
    r~   c                   @   ó   e Zd Zdd„ ZdS )ÚLegendSwatchCalloutc           
      C   s   |\}}	d S r6   r3   )
r�   r‡   r�   r�   r‘   r1   r’   Úswatchr“   r”   r3   r3   r4   r•   r   r–   zLegendSwatchCallout.__call__N©rw   rx   ry   r•   r3   r3   r3   r4   r™   q   ó    r™   c                   @   r˜   )ÚLegendColEndCalloutc                 C   s   d S r6   r3   )r�   r‡   r�   r2   Úxtr‘   ÚwidthÚlWidthr3   r3   r4   r•   v   s   zLegendColEndCallout.__call__Nr›   r3   r3   r3   r4   r�   u   rœ   r�   c                   @   s~  e Zd ZdZedgi deedd�“deedd�“deedd�“d	eed
d�“deedd�“deeddd�“deeddd�“deeddd�“deedd�“deedd�“deedd�“deeddƒdd�“ded d!d�“d"ee	d#d�“d$eed%d�“d&ee
d'd�“d(ee
d)d�“d*eed+d�“d,eeeeƒƒd-dd�“d.ed d/dd�“d0eed1ƒ“d2eed3dd4�“d5eed6dd7d8d9d:d;d<ƒd=dd4�“d>eed?dd�“d@ee
dAdd�“dBeedCdd�“dDeeed6d7d7dE�dFdd�“dGeedHdd�“dIed dJdd�“dKed dLd�“dMed dNdd�“dOeedPd�“dQeedRd�“ŽZdSdT„ ZdUdV„ ZdWdX„ ZdYdZ„ Zd[d\„ Zd]d^„ Zd_d`„ Zdadb„ Zdcdd„ Zdedf„ Zd S )hÚLegenda%  A simple legend containing rectangular swatches and strings.

    The swatches are filled rectangles whenever the respective
    color object in 'colorNamePairs' is a subclass of Color in
    reportlab.lib.colors. Otherwise the object passed instead is
    assumed to have 'x', 'y', 'width' and 'height' attributes.
    A legend then tries to set them or catches any error. This
    lets you plug-in any widget you like as a replacement for
    the default rectangular swatches.

    Strings can be nicely aligned left or right to the swatches.
    r2   z*x-coordinate of upper-left reference pointrb   r‘   z*y-coordinate of upper-left reference pointÚdeltaxz(x-distance between neighbouring swatchesÚdeltayz(y-distance between neighbouring swatchesÚdxTextSpacez*Distance between swatch rectangle and textÚautoXPaddingz(x Padding between columns if deltax=Noner'   )rc   ÚadvancedUsageÚautoYPaddingz%y Padding between rows if deltay=NoneÚyGapzAdditional gap between rowsru   zWidth of swatch rectanglerv   zHeight of swatch rectangleÚcolumnMaximumzMax. number of items per columnÚ	alignmentrd   re   z*Alignment of text with respect to swatchesÚcolorNamePairsNz4List of color/name tuples (color can also be widget)rM   ri   rN   rj   rr   zswatches filling colorÚstrokeColorzBorder color of the swatchesÚstrokeWidthz)Width of the border color of the swatchesÚswatchMarkerz)None, Auto() or makeMarker('Diamond') ...Úcalloutz'a user callout(self,g,x,y,(color,text))Ú	boxAnchorz Anchor point for the legend areaÚ
variColumnz1If true column widths may vary (default is false))r¦   rz   r   é   é   é   é   é   é   zGIf 1 we have dividers between the rows | 2 for extra top | 4 for bottomÚdividerWidthzdividerLines widthÚdividerColorzdividerLines colorÚdividerDashArrayzDash array for dividerLines.ÚdividerOffsXrl   zdivider lines X offsetsÚdividerOffsYzdividerLines Y offsetÚcolEndCalloutz.a user callout(self,g, x, xt, y,width, lWidth)rZ   zsubColumn propertiesÚswatchCalloutz5a user swatch callout(self,g,x,y,i,(col,name),swatch)Úswdxz$x position adjustment for the swatchÚswdyz$y position adjustment for the swatchc                 C   sþ   d| _ d| _d| _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _d| _tjd	ftjd
ftjdftjdftjdfg| _td | _td | _td | _td | _td | _d | _d| _d| _d| _d| _d| _d | _ tj!| _"d| _#d| _$d | _%|  &¡  d S )Nr   rd   éK   é   rµ   r²   é
   r³   ÚredÚblueÚgreenÚpinkÚyellowrM   rN   rr   r¬   r­   Únwç      à?©r   r   )'r2   r‘   rª   r¢   r£   r¥   r§   ru   rv   r¿   rÀ   r¤   r©   r   rÄ   rÅ   rÆ   rÇ   rÈ   r«   r   rM   rN   rr   r¬   r­   r®   r°   r¨   r±   rz   r¸   rº   Úblackr¹   r»   r¼   r½   Ú_init_subCols©r�   r3   r3   r4   Ú__init__«   sH   ü




zLegend.__init__c                 C   s:   t tƒ }| _d|_d |_ |_|_d|_d|d _d S )Nr'   r   re   rd   )r   ra   rZ   rY   ru   rv   rX   rp   )r�   r_   r3   r3   r4   rÍ   à   s
   zLegend._init_subColsc                 C   s    dD ]}t ||ƒr|  S qd S )N)ÚlinesÚbarsÚslicesÚstrands)Úhasattr)r�   Úchartr0   r3   r3   r4   Ú_getChartStyleNameç   s   zLegend._getChartStyleNamec                 C   s   t ||  |¡d ƒS r6   )rW   rÖ   )r�   rÕ   r3   r3   r4   Ú_getChartStyleì   s   zLegend._getChartStylec                    sJ   t |ƒsdd„ |D ƒ}|S t|dt|dd ƒƒ‰ ‡ fdd„tˆ jƒD ƒ}|S )Nc                 S   s   g | ]}t |d  ƒ‘qS )r'   )r>   )rC   Úpr3   r3   r4   rD   ñ   rT   z$Legend._getTexts.<locals>.<listcomp>rÕ   Úobjc                    s   g | ]
}ˆ   |d | ¡‘qS )ú	series %d)ÚgetSeriesName©rC   r1   ©rÕ   r3   r4   rD   ô   r�   )r   rW   r+   Ú_seriesCount)r�   r«   Útextsr3   rÝ   r4   Ú	_getTextsï   s   þzLegend._getTextsc                    sŠ   | j ‰| j‰| j‰‡‡‡fdd„t|  |¡ƒD ƒ‰ ˆ sddgS tdd„ ˆ D ƒƒ‰| jr@| j‰‡ ‡‡fdd„tdt	ˆ ƒ| jƒD ƒS t
ˆˆ ƒS )z2Calculate the maximum width of some given strings.c                    s    g | ]\}}t ||ˆ ˆˆƒ‘qS r3   )r`   )rC   r1   r/   )rM   rN   rZ   r3   r4   rD   ý   s     z2Legend._calculateMaxBoundaries.<locals>.<listcomp>r   c                 S   rH   r3   rI   ©rC   r/   r3   r3   r4   rD      rJ   c                    s"   g | ]}t ˆˆ ||ˆ … ƒ‘qS r3   )r5   )rC   Úr)ÚMr©   r,   r3   r4   rD     s   " )rM   rN   rZ   r*   rà   r(   r±   r©   r+   r)   r5   )r�   r«   r3   )rã   r©   rM   rN   r,   rZ   r4   Ú_calculateMaxBoundaries÷   s    $
zLegend._calculateMaxBoundariesc                 C   s  | j }| j}| j|  }}| j}t| jƒjjd }|dkrd}||9 }|d }| j}|s4t	||ƒ| j
 }d}	d}
|}| jd }|  | j¡D ]<}||| d  }|t|ƒ|  }d| | | }|t	||ƒ | }t|||ƒ}|
|kr{d}
|}|	d }	qE|}|
d }
qE|| S )Nç     @�@r   ç`åÐ"Ûùæ?ç333333ó?r'   rÊ   r²   )rv   r¨   r‘   rN   r   rM   ÚfaceÚascentr£   r(   r§   r©   rà   r«   rL   Úmin)r�   rv   r¨   ÚthisyÚ
upperleftyrN   ré   rq   r£   ÚcolumnCountÚcountÚlowyÚlimr”   Úy0r‘   ÚleadingMoveÚnewyr3   r3   r4   Ú_calcHeight  s6   


zLegend._calcHeightc              	   C   s   t |||||||d�S )N)rr   r¬   r­   )r   )r�   r2   rë   ru   rv   rr   r­   r¬   r3   r3   r4   Ú_defaultSwatch%  s
   
ýzLegend._defaultSwatchc           S      C   sr  | j }t|ƒ}|r#t|dt|dd ƒƒ}d }t|d�}|j}|  |¡}nt| dd ƒ}t|ƒr<t|dt|dd ƒƒ}t|d�}t|ƒ}| j}| j}| j	}	| j
}
| j}| j}| j}| j}| j}| j}| j}| j}| j}|d }| j}|sxt||ƒ| j }| j}|  |¡}t||
 d |
d  ƒ}|| | j }| j}|r¦tdd	„ |D ƒƒ||  }nt|d
 | |ƒ}|| }||g }| j}| j| j }|dvrØ|  ¡ }|dv rÔ||d 7 }n||7 }|dvrë|dv rç||d 8 }n||8 }|}t ƒ } t!|ƒj"j#d }!|!dkrþd}!|!|9 }!|
d }"t| dd ƒ}#t| dd ƒ}$| j$}%|%�r'| j%}&| j&}'| j'}(| j(})| j)}*t*|ƒD �]
}+|�r;|},|+|,_+||+ }-n%||+ \},}-t|ƒ�rK|},|+|,_+t|-ƒ�r`t|dt|dd ƒƒ ,|+d|+ ¡}-t-|-ƒ}.g }/|/j.}0t|+|
d  ƒ}1||1 }2|||! d   }3}4|#�rŒ|#| | ||3|,|-fƒ |	dk�rœ|}5||2d
  | }6n|	dk�rª|| | }5|}6nt/dƒ‚t0|-ƒ�s¶|.g}.|3}7t1|.ƒD ]ÿ\}8}9|4}3|8d }:|5|2|:  };|5|2|:d   }<||8|+f }=|=j2}>|=j}?|=j}@t|=d|ƒ}At|=d|ƒ}Bt|=d|ƒ}Ct|=dd| ƒ}D|A|k�r	|!|B | }Ent!|ƒj"j#d }E|Edk�rd}E|E|B9 }E|>dk�r&d}>|;}Fn|>dk�r0d }>|<}Fn|>d!k�r8|<}Fnd"}>d|;|<  }F|9D ]}G|0t3|F|? |3|@ |G|A|B|C|>d#�ƒ |3|D8 }3�qBt4|7|3ƒ}7|3|D7 }3|3t|D|E dƒ d$f|3|E d%ffD ]D\}H}It|=|Id ƒ}J|J�r¸t5|Jt6t7fƒ�s�|Jf}J|JD ](}Kt8 8|K¡}K|K j9|H7  _9|K j:|H7  _:|K j;|;7  _;|K j<|<7  _<|0|Kƒ �q��qu�q¼|6}5|7}3d|4 |3 | }L|%�r5|| | |2d
  |)d  }M||d  |* }7|%d@ �rë|+|
 �sõ|%d@ �r|+|
 �s|  =t>||)d  |7|M|7|'|&|(d&�¡ |%d'@ �r5|+|
 |"k�s|+|d k�r5|7t||Lƒ| 8 }7|  =t>||)d  |7|M|7|'|&|(d&�¡ |5t| d(dƒ }N|t| d)dƒ }Ot|,ƒ�rbt|,dt|,dd ƒƒ}| ?t|,d*|+ƒ|N|O||¡}PnKt5|,t@jAƒ�r‹tB|ƒ�r~tC||N|d  |O|d  |,ƒ}Pn/| jD|N|O|||,||d+�}Pn"|,d u�r«zt8 E|,¡}P|N|P_|O|P_||P_F||P_GW n	   d }PY nd }P|P�rÄ|  =|P¡ |$�rÄ|$| | ||4|+|,|-f|Pƒ |/D ]}Q|  =|Q¡ �qÆ| jH�r|+|
 |"k�sá|+|d k�r|	dk�ré|}Rn|| | }R||d  |* t||Lƒ|  }7|  H| | ||R|7|2d
 |2d
 | | ¡ |+|
 |"k�r,|�r$||2d
 | 7 }n|| }|}�q+|t||Lƒ | }�q+| S ),NrÕ   rÙ   )rÙ   r®   rç   r'   g      ð?c                 S   s   g | ]}|d  ‘qS )rU   r3   rá   r3   r3   r4   rD   R  rJ   zLegend.draw.<locals>.<listcomp>rU   )Úner,   rÉ   Úautoy)ÚeÚcÚwg       @)rÉ   rú   ÚswÚautox)r,   rù   r:   r²   rå   r   ræ   r¯   r¾   rÚ   rÊ   rd   re   zbad alignmentrM   rN   rr   rq   ÚstartÚendrh   Úmiddle©rM   rN   rr   Ú
textAnchorrs   rt   ©r¬   r­   ÚstrokeDashArrayr´   r¿   rÀ   Úindex)rr   r­   r¬   )Ir«   r   rW   r   rÞ   rà   r)   ru   rv   rª   r©   r¢   r£   r¤   rM   rN   rr   r­   r¬   rZ   r¨   r(   r§   r°   rä   Úintr¥   r±   Úsumr2   r‘   rô   r   r   rè   ré   rz   r¸   r¹   rº   r»   r¼   r&   r  rÛ   rG   rV   Ú
ValueErrorr"   r*   rp   r   rê   r7   rF   r<   ÚcopyÚy1Úy2Úx1Úx2Úaddr   ÚmakeSwatchSampler   ÚColorr!   r    rõ   ÚdeepcopyrŸ   Úheightr½   )Sr�   r«   ÚautoCPrÕ   r®   r,   Ú
chartTextsru   rv   rª   r©   r¢   r£   r¤   rM   rN   rr   r­   r¬   rZ   rq   r¨   ÚbaÚmaxWidthÚnColsÚxWr±   rŸ   r�   rë   r  rì   r�   ré   rð   r¯   Úscalloutrz   r¸   r¹   rº   r»   r¼   r1   r“   r”   rK   r[   r\   r]   ÚjOffsr‘   rñ   r2   ÚxnÚydÚkrÐ   Úkkr  r  r_   ÚanchorÚscdxÚscdyrR   rS   ÚfCÚfLÚfAÚxoffsr^   Úiyr0   ÚilÚlrò   ÚxdÚswatchXÚswatchYrù   r:   rž   r3   r3   r4   Údraw,  s~  






 






"
*
€ö(ÿ&ÿ

 



$
&zLegend.drawc                 C   sT   t ddƒ}tƒ }d|_d|_d|_d|_d ¡ }dd„ |D ƒ}||_| |d	¡ |S )
úMake sample legend.éÈ   éd   rd   r   rµ   ú&red green blue yellow pink black whitec                 S   ó   g | ]	}t t|ƒ|f‘qS r3   ©rW   r   rÜ   r3   r3   r4   rD     rE   zLegend.demo.<locals>.<listcomp>r‡   ©	r   r¡   rª   r2   r‘   r¤   rA   r«   r  )r�   Údr‡   Úitemsr3   r3   r4   Údemo  ó   
zLegend.demor3   )rw   rx   ry   Ú__doc__r{   r|   r   r   r   r   r   r   r   r!   r   r
   r   r   r}   rÏ   rÍ   rÖ   r×   rà   rä   rô   rõ   r+  r5  r3   r3   r3   r4   r¡   y   s     ÿþýüûúùø	÷
öõôóòñðïîíì
ëê éèçæåäãâá à!ß$5 \r¡   c                   @   s:   e Zd Zddedejdejdddddfdd	„Zd
d„ ZdS )ÚTotalAnnotatorÚTotalz0.0rÃ   rÊ   Nr   rË   c                 C   sL   || _ || _|| _|| _|| _|
| _|	| _|| _|| _|| _	|| _
|| _d S r6   )ÚlTextÚrTextrM   rN   rr   rv   ru   ÚdlyÚdlxr­   r¬   r  )r�   r:  r;  rM   rN   rr   r­   r¬   r  ru   rv   r<  r=  r3   r3   r4   rÏ     s   
zTotalAnnotator.__init__c                 C   s  ddl m}m}	 | j}
| j}| j}| j}| j}t|ƒj	j
d }|dkr%d}||
9 }|
d }|| j |d  }| jrJ|rJ| |||| j||
|dd�¡ | jr^| ||| || j||
|d	d�¡ |r†|rˆ|| j | }| |	|| jd  ||| jd
  | |||| jd�¡ d S d S d S )Nr   )r   r   rå   ræ   rç   gÍÌÌÌÌÌô?rý   r   rþ   r'   r  )Úreportlab.graphics.shapesr   r   rN   rM   rr   r¬   r­   r   rè   ré   rv   r:  r  r;  r<  r=  r  )r�   r‡   r�   r2   rž   r‘   rŸ   r    r   r   rN   rM   rr   r¬   r­   ré   rq   ÚytÚyLr3   r3   r4   r•   *  s@   
üü&þþzTotalAnnotator.__call__)rw   rx   ry   r$   r   rÌ   rÏ   r•   r3   r3   r3   r4   r8    s    
þr8  c                
   @   sd   e Zd ZdZeeedd�eedd�eedd�eedd�eedd�eedd�d	�Z	d
d„ Z
dd„ ZdS )Ú
LineSwatchzHbasically a Line with properties added so it can be used in a LineLegendz(x-coordinate for swatch line start pointrb   z(y-coordinate for swatch line start pointzlength of swatch linezused for line strokeWidthzcolor of swatch linezdash array for swatch line)r2   r‘   rŸ   r  r¬   r  c                 C   s@   ddl m} ddlm} d| _d| _d| _d| _|| _d | _	d S )Nr   )rÄ   )r   rÂ   r'   )
Úreportlab.lib.colorsrÄ   r>  r   r2   r‘   rŸ   r  r¬   r  )r�   rÄ   r   r3   r3   r4   rÏ   S  s   
zLineSwatch.__init__c                 C   s8   t | j| j| j| j | jƒ}| j|_| j|_| j|_|S r6   )r   r2   r‘   rŸ   r¬   r  r  r­   )r�   r'  r3   r3   r4   r+  ]  s
   zLineSwatch.drawN)rw   rx   ry   r7  r{   r|   r   r   r   r}   rÏ   r+  r3   r3   r3   r4   rA  H  s    





ú	
rA  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
LineLegendzÔA subclass of Legend for drawing legends with lines as the
    swatches rather than rectangles. Useful for lineCharts and
    linePlots. Should be similar in all other ways the the standard
    Legend class.
    c                 C   s   t  | ¡ d| _d| _d S )NrÃ   r²   )r¡   rÏ   ru   rv   rÎ   r3   r3   r4   rÏ   k  s   

zLineLegend.__init__c           	      C   s(   t ƒ }||_||_||_||_||_|S r6   )rA  r2   r‘   rŸ   r  r¬   )	r�   r2   rë   ru   rv   rr   r­   r¬   r'  r3   r3   r4   rõ   r  s   zLineLegend._defaultSwatchN)rw   rx   ry   r7  rÏ   rõ   r3   r3   r3   r4   rC  d  s    rC  c                  C   sT   t ddƒ} tƒ }d|_d|_d|_d|_d ¡ }dd„ |D ƒ}||_|  |d	¡ | S )
r,  r-  r.  re   r   rµ   r/  c                 S   r0  r3   r1  rÜ   r3   r3   r4   rD   †  rE   zsample1c.<locals>.<listcomp>r‡   r2  ©r3  r‡   r4  r3   r3   r4   Úsample1c{  r6  rE  c                  C   ó`   t ddƒ} tƒ }d|_d|_d|_d|_d|_d|_d	 ¡ }d
d„ |D ƒ}||_	|  
|d¡ | S )r,  r-  r.  re   rÂ   éZ   é<   rÃ   r´   r/  c                 S   r0  r3   r1  rÜ   r3   r3   r4   rD   ›  rE   zsample2c.<locals>.<listcomp>r‡   )r   r¡   rª   r2   r‘   r¢   r¤   r©   rA   r«   r  rD  r3   r3   r4   Úsample2cŽ  s   
rI  c                  C   rF  )z&Make sample legend with line swatches.r-  r.  re   rÂ   rG  rH  rÃ   r´   r/  c                 S   r0  r3   r1  rÜ   r3   r3   r4   rD   ¯  rE   zsample3.<locals>.<listcomp>r‡   )r   rC  rª   r2   r‘   r¢   r¤   r©   rA   r«   r  rD  r3   r3   r4   Úsample3¢  s   
rJ  c                  C   sÈ   t ddƒ} tƒ }d|_d|_d|_d|_d|_d|_d	 ¡ }d
dgd
dgg d¢g d¢g d¢g d¢dgf}g }t	dt
|ƒƒD ]}tƒ }tt|| ƒ|_|| |_| ||| f¡ q=||_|  |d¡ | S )zBMake sample legend with line swatches and dasharrays on the lines.r-  r.  re   rÂ   rG  rH  rÃ   r´   r/  r²   r'   rµ   )r²   r²   rµ   rµ   )r'   r²   r³   r´   )r´   r²   r³   r´   )r'   r²   r³   r´   rµ   r¶   r   r‡   )r   rC  rª   r2   r‘   r¢   r¤   r©   rA   r+   r)   rA  rW   r   r¬   r  rV   r«   r  )r3  r‡   r4  ÚdarraysÚcnpr1   r'  r3   r3   r4   Úsample3a¶  s&   
,
rM  )EÚ__version__r7  r  ÚoperatorÚreportlab.libr   Úreportlab.lib.validatorsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Úreportlab.lib.attrmapÚreportlab.pdfbase.pdfmetricsr   r   Úreportlab.graphics.widgetbaser   r   r   r>  r   r   r   r   r   r   Úreportlab.graphics.charts.areasr   Ú"reportlab.graphics.widgets.markersr    r!   Úreportlab.lib.utilsr"   r#   r$   Ú	functoolsr%   Ú	reportlabr&   r5   r;   r>   rG   rL   r`   ra   r~   r™   r�   r¡   r8  rA  rC  rE  rI  rJ  rM  r3   r3   r3   r4   Ú<module>   sH   H    #/