o
    ¬+ Z:`  ã                   @   sŠ  d Z d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 ddlT 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$ ddl%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z, G dd„ deƒZ-G dd„ de*ƒZ.G dd„ de.ƒZ/G dd„ de/ƒZ0dd„ Z1G dd„ dƒZ2G dd„ de0ƒZ3G dd„ de/ƒZ4dd„ Z5G d d!„ d!e0ƒZ6d"d#„ Z7d$d%„ Z8d&d'„ Z9d(S ))z3.3.0z;This modules defines a very preliminary Line Chart example.é    )Úcolors)ÚisNumberÚisNumberOrNoneÚisColorÚisColorOrNoneÚisListOfStringsÚisListOfStringsOrNoneÚ
SequenceOfÚ	isBooleanÚNoneOrÚisListOfNumbersOrNoneÚisStringOrNoneÚOneOfÚ
Percentage)Ú*)ÚWidgetÚTypedPropertyCollectionÚ
PropHolder)ÚLineÚRectÚGroupÚDrawingÚPolygonÚPolyLine)ÚNoEntry)ÚXCategoryAxisÚ
YValueAxis)ÚLabel)ÚuSymbol2SymbolÚisSymbolÚ
makeMarker)ÚPlotArea)Ú_objStrc                   @   s’   e Zd Zeeedd�eedd�eedd�eedd�eee	ƒddd�ed	d
dd�ed	ddd�ee
dd�eeedddƒƒddd�eeddd�d�
Zd	S )ÚLineChartPropertieszWidth of a line.©ÚdesczColor of a line or border.zfill color of a bar.zDash array of a line.zWidget placed at data points.é   ©r%   ÚadvancedUsageNzShader Class.zFiller Class.zName of the line.ÚlineÚ
joinedLineÚbarzWhat kind of plot this line isz2Percentage of available width to be used for a bar)
ÚstrokeWidthÚstrokeColorÚ	fillColorÚstrokeDashArrayÚsymbolÚshaderÚfillerÚnameÚ	lineStyleÚbarWidth)Ú__name__Ú
__module__Ú__qualname__ÚAttrMapÚAttrMapValuer   r   r   r   r   r   r   r   Ú_attrMap© r<   r<   úV/var/www/html/env/lib/python3.10/site-packages/reportlab/graphics/charts/linecharts.pyr#      s    





ör#   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚAbstractLineChartc                 C   sd  | j }|t|ƒ }|| }|j}	||d  }
t|dd ƒ}|dkrFt|dt|dd ƒƒ}t|dt|dd ƒƒ}t||||||	d|t|d|	ƒd�	}n4| jsM|d	krxt|dt|dd ƒƒ}t|dt|dd ƒƒ}t||
|| |
|	dd
�}|rr||_|rw||_nd }t	|dƒrƒ|j
}nt	|dƒrŒ|j
}nd }|r›t|||d  |
|	ƒ}|r®|r®tƒ }| |¡ | |¡ |S |p±|S )Ng       @r4   r+   r/   r,   r   r.   )r,   r-   ÚstrokeLineCapr/   r.   r*   )r-   r?   r0   )ÚlinesÚlenr-   Úgetattrr   ÚjoinedLinesr   r,   r/   Úhasattrr0   r   r   Úadd)ÚselfÚrowNoÚxÚyÚwidthÚheightÚ	baseStyleÚstyleIdxÚstyleÚcolorÚyh2r4   Údashr,   ÚLÚSÚgr<   r<   r=   ÚmakeSwatchSample&   s<   $

€



z"AbstractLineChart.makeSwatchSampleNc                 C   s   t t| j| d|ƒƒS )zreturn series name i or defaultr3   )r"   rB   r@   )rF   ÚiÚdefaultr<   r<   r=   ÚgetSeriesNameI   s   zAbstractLineChart.getSeriesName©N)r6   r7   r8   rU   rX   r<   r<   r<   r=   r>   $   s    #r>   c                   @   ó   e Zd ZdS )Ú	LineChartN©r6   r7   r8   r<   r<   r<   r=   r[   M   ó    r[   c                	   @   s4  e Zd ZdZed3i de“deeddd�“deeddd�“d	ed
dd�“ded
dd�“ded
dd�“deedd�“deedd�“ded
dd�“ded
dd�“ded
dd�“deedd�“ded
dd�“dee	d dd�“d!ee	d"dd�“d#ed
d$dd�“ŽZ
d%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd
S )4ÚHorizontalLineCharta±  Line chart with multiple lines.

    A line chart is assumed to have one category and one value axis.
    Despite its generic name this particular line chart class has
    a vertical value axis and a horizontal category one. It may
    evolve into individual horizontal and vertical variants (like
    with the existing bar charts).

    Available attributes are:

        x: x-position of lower-left chart origin
        y: y-position of lower-left chart origin
        width: chart width
        height: chart height

        useAbsolute: disables auto-scaling of chart elements (?)
        lineLabelNudge: distance of data labels to data points
        lineLabels: labels associated with data values
        lineLabelFormat: format string or callback function
        groupSpacing: space between categories

        joinedLines: enables drawing of lines

        strokeColor: color of chart lines (?)
        fillColor: color for chart background (?)
        lines: style list, used cyclically for data series

        valueAxis: value axis object
        categoryAxis: category axis object
        categoryNames: category names

        data: chart data, a list of data series of equal length
    ÚBASEÚuseAbsolutez$Flag to use absolute spacing values.r&   r'   ÚlineLabelNudgez,Distance between a data point and its label.Ú
lineLabelsNz(Handle to the list of data point labels.r$   ÚlineLabelFormatz9Formatting string or function used for data point labels.ÚlineLabelArrayzHexplicit array of line label values, must match size of data if present.ÚgroupSpacingz? - Likely to disappear.rC   z.Display data points joined with lines if true.r@   zHandle of the lines.Ú	valueAxiszHandle of the value axis.ÚcategoryAxiszHandle of the category axis.ÚcategoryNameszList of category names.Údataz/Data to be plotted, list of (lists of) numbers.ÚinFillz!Whether infilling should be done.ÚreversePlotOrderzIf true reverse plot order.Úannotationsz<list of callables, will be called with self, xscale, yscale.c                 C   s°   t  | ¡ d | _d | _tƒ | _tƒ | _ddg| _d| _	t
tƒ| _d| j_tj| jd _tj| jd _tj| jd _d| _d| _t
tƒ| _d | _d | _d| _d| _d| _d| _d S )N)éd   én   éx   é‚   )éF   éP   rr   éZ   )ÚNorthÚSouthÚEastÚWestr&   r   é   é
   )r[   Ú__init__r-   r.   r   rg   r   rf   ri   rh   r   r#   r@   r,   r   ÚredÚgreenÚbluer`   re   r   rb   rc   rd   ra   rC   rj   rk   ©rF   r<   r<   r=   rz   ˆ   s.   
ÿ


zHorizontalLineChart.__init__c                 C   sP   t ddƒ}ddg}tƒ }d|_d|_d|_d|_||_td	ƒ|j_	| 
|¡ |S )
ú Shows basic use of a line chart.éÈ   rm   ©é   é   é   é   é%   é-   é   é   ©é   ry   é   é   é&   é.   é   rƒ   r„   ry   éU   éª   ÚCircle)r   r^   rH   rI   rK   rJ   ri   r    r@   r0   rE   ©rF   Údrawingri   Úlcr<   r<   r=   Údemo¹   s   
þ
zHorizontalLineChart.democ                 C   s  t | jƒ| _tttt | jƒƒƒ| _| jrd}n| j}| j	 
d¡d }|| }|| _| j 
d¡ | _}d| j |  | _}g | _tt | jƒƒD ]@}g }tt | j| ƒƒD ],}| j| | }	|	dur| j	 
|¡\}
}|
| }|}| j 
|	¡| }| ||| f¡ qS| j |¡ qFdS )z…Works out where they go.

        Sets an attribute _positions which is a list of
        lists of (x, y) matching the data.
        g      ð?r   r&   ç      à?N)rA   ri   Ú_seriesCountÚmaxÚlistÚmapÚ
_rowLengthr`   re   rg   ÚscaleÚ_normFactorrf   Ú_yzeroÚ_hngsÚ
_positionsÚrangeÚappend)rF   Ú
normFactorÚ	normWidthÚ
availWidthÚyzeroÚhngsrG   ÚlineRowÚcolNoÚdatumÚgroupXÚ
groupWidthrH   rI   rK   r<   r<   r=   ÚcalcPositionsÑ   s0   €öz!HorizontalLineChart.calcPositionsc           	      C   sâ   | j }| j| | }|du rd}n0t|ƒtu r1|dkr,z	| j| | }W n   d}Y n|| }nt|dƒr;||ƒ}ntd| ƒ‚|rm| j||f }|jsOdS |dkr]| 	||| j
 ¡ n	| 	||| j
 ¡ | |¡ |S d}|S )z*Draw a label for a given item in the list.NÚvaluesÚ__call__z6Unknown formatter type %s, expected string or functionr   )rc   ri   ÚtypeÚstrrd   rD   Ú
ValueErrorrb   ÚvisibleÚ	setOriginra   ÚsetText)	rF   rG   r«   rH   rI   ÚlabelFmtÚ
labelValueÚ	labelTextÚlabelr<   r<   r=   Ú_innerDrawLabelõ   s0   




ÿz#HorizontalLineChart._innerDrawLabelc                 C   s   |  |  ||||¡¡ dS )zLDraw a label for a given item in the list.
        G must have an add methodN)rE   r¼   )rF   ÚGrG   r«   rH   rI   r<   r<   r=   Ú	drawLabel  s   zHorizontalLineChart.drawLabelc                 C   s°  t ƒ }| j}ttt| jƒƒƒ}| jr| ¡  | j}|r/| j	j
}| jj}|| j	j }t| d|ƒ}| j}	|D �] }
| j|
 }t| jƒ}|
| }| j| }|j}t|dd ƒ}t|dd ƒ}t|dƒrb|j}nt| jdƒrm| jj}nd }|dkr»t|dtdƒƒ}t|d|ƒ}t|tƒrŽ| j| d	 }n|d
 }tt|ƒƒD ]!}|| \}}| t|| t||	ƒd| t||	 ƒ|||d�¡ q˜nF| jsÃ|dk�rg }tt|ƒƒD ]}||| 7 }qË|rê|||||g }| t|||dd�¡ nt||ddd�}|r÷||_|rü||_| |¡ t|dƒ�r|j}nt| jdƒ�r| jj}nd }|�r<tt|ƒƒD ]}|| \}}t ||||jƒ}|�r:| |¡ �q"tt|ƒƒD ]}|| \}}|  !||
|||¡ �qBq4|S )NÚ_inFillGr/   r4   r,   r+   r5   é2   r.   g{®Gáz„?r˜   rx   )r,   r-   r.   r*   çš™™™™™¹?)r.   r-   r,   r   r&   )r-   r?   ÚstrokeLineJoinr0   )"r   rc   r›   r£   rA   r¢   rk   Úreverserj   rg   Ú_yrf   Ú_xÚ_lengthrB   r    r@   r-   rD   r,   r   Ú
isinstancer¡   rE   r   ÚminÚabsrC   r   r   r/   r0   r   r¾   )rF   rT   r¸   ÚPrj   ÚinFillYÚinFillX0ÚinFillX1ÚinFillGr¨   rG   ÚrowÚ
styleCountrM   ÚrowStyleÚrowColorrQ   r4   r,   r5   r.   Úhbwr«   rH   rI   Úpointsr)   ÚuSymbolÚx1Úy1r0   r<   r<   r=   Ú	makeLines  s~   






4þ

€þzHorizontalLineChart.makeLinesc           	      C   s„  | j | j}}| | j| j| j¡ |r||_|r||_| | j¡ | 	d¡}|| j| j ks3|| jk r7| j}n|}| | j|| j
¡ | | j¡ |  ¡  tƒ }| |  ¡ ¡ | jrctƒ | _| | j¡ | |¡ | |¡ t|ddƒ}t|ddƒ}|s„|j|| |jd� |s�|j|| |jd� | |  ¡ ¡ |r¡|j|| |jd� |r¬|j|| |jd� t| ddƒD ]}| || |j	|j	ƒ¡ q²|S )zDraws itself.r   ÚdrawGridLastF)ÚparentÚdimrl   r<   )rf   rg   ÚsetPositionrH   rI   rK   ÚjoinAxisÚ	configureri   rž   rJ   r¯   r   rE   ÚmakeBackgroundrj   r¿   rB   ÚmakeGridÚgetGridDimsrØ   )	rF   ÚvAÚcAÚxAxisCrossesAtrI   rT   ÚcAdglÚvAdglÚar<   r<   r=   Údrawi  s8   




(zHorizontalLineChart.drawr<   )r6   r7   r8   Ú__doc__r9   r[   r:   r   r   r
   r;   rz   r—   r¯   r¼   r¾   rØ   rè   r<   r<   r<   r=   r^   S   sP    "ÿþýüûúùø	÷
öõôóòñ1$"Mr^   c                 C   s    | d  | d | d | d  fS )zt, z0, z1, x, y = a[:5]r&   é   r   r‰   r<   )rç   r<   r<   r=   Ú_fakeItemKey‘  s    rë   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
_FakeGroupc                 C   s
   g | _ d S rY   ©Ú_datar~   r<   r<   r=   rz   –  s   
z_FakeGroup.__init__c                 C   s   |r
| j  |¡ d S d S rY   )rî   r¤   )rF   Úwhatr<   r<   r=   rE   ™  s   z_FakeGroup.addc                 C   s   | j S rY   rí   r~   r<   r<   r=   Úvalueœ  s   z_FakeGroup.valuec                 C   s   | j jtd� d S )N)Úkey)rî   Úsortrë   r~   r<   r<   r=   rò   Ÿ  s   z_FakeGroup.sortN)r6   r7   r8   rz   rE   rð   rò   r<   r<   r<   r=   rì   •  s
    rì   c                	   @   sn   e Zd Zeeeedd�eedd�eedd�eedd�d�ZdZdZ	dZ
d	Zd
d„ Zdd„ Zdd„ Zdd„ ZdS )ÚHorizontalLineChart3Dzdx/dzr$   zdy/dzzdepth of an individual serieszz gap around series)r_   Útheta_xÚtheta_yÚzDepthÚzSpacer˜   ry   rê   c                 C   sf   t  | ¡ | j}| j}| j}| jjdkr|| |d |  }n|d|  }| j| | _| j	| | _
d S )NÚparallel_3dr&   rx   )r^   r¯   r™   r÷   rö   rg   rN   rô   Ú_3d_dxrõ   Ú_3d_dy)rF   ÚnSeriesr÷   rö   Ú	_3d_depthr<   r<   r=   r¯   ¯  s   
z#HorizontalLineChart3D.calcPositionsc                 C   s0   | j }| jjdkr|| j|  | }|S |}|S )Nrø   )r÷   rg   rN   rö   )rF   rG   r÷   Úz0r<   r<   r=   Ú_calc_z0»  s   ÿzHorizontalLineChart3D._calc_z0c                 C   s   ||| j   ||| j  fS rY   )rô   rõ   )rF   rH   rI   Úzr<   r<   r=   Ú_zadjustÃ  s   zHorizontalLineChart3D._zadjustc                  C   s”  | j }ttt| jƒƒƒ}| jr| ¡  | j}|rJ dƒ‚| j}| j	}| j
}| j}tƒ }ddlm}	 t| dd ƒ}
|
sA| jjdkrAd}
|D ]î}| j| }t|ƒ}t| jƒ}|| }| j| }|j}t|dd ƒ}|  |¡}|| }t| j| dƒr}| j| j}nt| jdƒrˆ| jj}nd }| jr¼|r¼|d \}}td|ƒD ]!}|| \}}|	||||||||||d |
d d d d	d
� ||}}qšt| j| dƒrË| j| j}nt| jdƒrÖ| jj}nd }|�rt|ƒD ]%}|| \}}||||ƒ\}}t||||ƒ}|�r| d|||||f¡ qßt|ƒD ]'}|| \}}||||ƒ\}}|  ||||¡}|�r/| d|||||f¡ �q	qC| ¡  tƒ }| ¡ D ]
}| |d ¡ �q=|S )NzinFill not supported for 3d yetr   )Ú_make_3d_line_infoÚ_3d_tilewidthrø   r&   r/   r,   rÁ   )ÚfillColorShadedÚ	tileWidthr-   r,   r/   Úshadingr0   rx   éÿÿÿÿ)rc   r›   r£   rA   r¢   rk   rÃ   rj   rö   r   rô   rõ   rì   Ú!reportlab.graphics.charts.utils3dr  rB   rg   rN   r@   r-   rþ   rD   r,   rC   r0   r   rE   r¼   rò   r   rð   ) rF   r¸   rÊ   rj   rö   r   rô   rõ   ÚFr  r  rG   rÏ   ÚnrÐ   rM   rÑ   rÒ   rQ   rý   Úz1r,   Úx0Úy0r«   rÖ   r×   rÕ   r0   rR   rT   Úvr<   r<   r=   rØ   Æ  s~   




ü
€€üzHorizontalLineChart3D.makeLinesN)r6   r7   r8   r9   r^   r:   r   r;   rô   rõ   rö   r÷   r¯   rþ   r   rØ   r<   r<   r<   r=   ró   £  s    



üró   c                   @   rZ   )ÚVerticalLineChartNr\   r<   r<   r<   r=   r    r]   r  c                  C   s�   t ddƒ} ddg}tƒ }d|_d|_d|_d|_||_d|_td	ƒ|j	_
d
|_d d¡}||j_d|jj_d|j_d|j_d|j_|  |¡ | S )Né�  r€   r�   ©rƒ   r„   r�   rŽ   é   rŒ   é   r‹   rÀ   é}   é,  r&   ÚFilledDiamondú%2.0fúJan Feb Mar Apr May Jun Jul Augú r	  r   é<   é   )r   r^   rH   rI   rK   rJ   ri   rC   r    r@   r0   rc   Úsplitrg   rh   ÚlabelsÚ	boxAnchorrf   ÚvalueMinÚvalueMaxÚ	valueSteprE   ©r•   ri   r–   ÚcatNamesr<   r<   r=   Úsample1  s*   
þ


r#  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚSampleHorizontalLineChartzHSample class overwriting one method to draw additional horizontal lines.c                 C   sX   t ddƒ}ddg}tƒ }d|_d|_d|_d|_||_tj|_	t 
d	¡|_| |¡ |S )
r   r€   rm   r�   rŠ   r„   ry   r‘   r’   éÌÌÌ )r   r$  rH   rI   rK   rJ   ri   r   Úwhiter-   ÚHexColorr.   rE   r”   r<   r<   r=   r—   ;  s   
þ
zSampleHorizontalLineChart.democ              
   C   s^   t ƒ }| t | ¡¡ | j}|j}|D ]}| |¡}| t| j|| j| j	 || j
d�¡ q|S )N)r-   )r   rE   r^   rß   rf   Ú_tickValuesrž   r   rH   rJ   r-   )rF   rT   ÚvalAxisÚvalTickPositionsrI   r<   r<   r=   rß   T  s   

ÿz(SampleHorizontalLineChart.makeBackgroundN)r6   r7   r8   ré   r—   rß   r<   r<   r<   r=   r$  8  s    r$  c                  C   s¤   t ddƒ} ddg}tƒ }d|_d|_d|_d|_||_d|_tj	|_
t d	¡|_td
ƒ|j_d|_d d¡}||j_d|jj_d|j_d|j_d|j_|  |¡ | S )Nr  r€   r�   r  rÀ   r  r  r&   r%  r  r  r  r  r	  r   r  r  )r   r$  rH   rI   rK   rJ   ri   rC   r   r&  r-   r'  r.   r    r@   r0   rc   r  rg   rh   r  r  rf   r  r  r   rE   r!  r<   r<   r=   Úsample1ae  s.   
þ


r+  c                  C   s    t ddƒ} ddg}tƒ }d|_d|_d|_d|_||_d|_td	ƒ|j	_
d
|_tj|_tj|_d d¡}||j_d|jj_d|j_d|j_d|j_|  |¡ | S )Nr  r€   r�   r  rÀ   r  r  r&   ÚSmileyr  r  r  r	  r   r  r  )r   r^   rH   rI   rK   rJ   ri   rC   r    r@   r0   rc   r   Úblackr-   Ú	lightbluer.   r  rg   rh   r  r  rf   r  r  r   rE   r!  r<   r<   r=   Úsample2‡  s.   
þ


r/  c                  C   sÀ   t ddƒ} ddg}tƒ }d|_d|_d|_d|_||_d|_d	|_t	j
|_td
ƒ|jd _t|jd _d|jd _d|jd _d d¡}||j_d|jj_d|j_d|j_d|j_|  |¡ | S )Nr  r€   r�   r  rÀ   r  r  r&   r  r,  r   rx   r‰   r  r  r	  r  r  )r   r^   rH   rI   rK   rJ   ri   rC   rc   r   r-  r-   r    r@   r0   r   r,   r  rg   rh   r  r  rf   r  r  r   rE   r!  r<   r<   r=   Úsample3©  s2   
þ


r0  N):Ú__version__ré   Úreportlab.libr   Úreportlab.lib.validatorsr   r   r   r   r   r   r	   r
   r   r   r   r   r   Úreportlab.lib.attrmapÚreportlab.graphics.widgetbaser   r   r   Úreportlab.graphics.shapesr   r   r   r   r   r   Ú*reportlab.graphics.widgets.signsandsymbolsr   Úreportlab.graphics.charts.axesr   r   Ú$reportlab.graphics.charts.textlabelsr   Ú"reportlab.graphics.widgets.markersr   r   r    Úreportlab.graphics.charts.areasr!   Ú!reportlab.graphics.charts.legendsr"   r#   r>   r[   r^   rë   rì   ró   r  r#  r$  r+  r/  r0  r<   r<   r<   r=   Ú<module>   s8   < )  @q -""