o
    Rŀg                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ G dd deZdS )zLinear Drawer module.

Provides:
 - LinearDrawer -  Drawing object for linear diagrams

For drawing capabilities, this module uses reportlab to draw and write
the diagram: http://www.reportlab.com
    )ceil)Drawing)Group)Line)Polygon)String)colors   )_stroke_and_fill_colors)AbstractDrawer)
angle2trig)deduplicate
draw_arrowdraw_boxdraw_cut_corner_box)intermediate_points)
FeatureSet)GraphSetc                   @   s   e Zd ZdZ																d9d	d
Zdd Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Z	d:d3d4Zd5d6 Zd7d8 ZdS );LinearDrawera  Linear Drawer.

    Inherits from:
     - AbstractDrawer

    Attributes:
     - tracklines    Boolean for whether to draw lines delineating tracks
     - pagesize      Tuple describing the size of the page in pixels
     - x0            Float X co-ord for leftmost point of drawable area
     - xlim          Float X co-ord for rightmost point of drawable area
     - y0            Float Y co-ord for lowest point of drawable area
     - ylim          Float Y co-ord for topmost point of drawable area
     - pagewidth     Float pixel width of drawable area
     - pageheight    Float pixel height of drawable area
     - xcenter       Float X co-ord of center of drawable area
     - ycenter       Float Y co-ord of center of drawable area
     - start         Int, base to start drawing from
     - end           Int, base to stop drawing at
     - length        Int, size of sequence to be drawn
     - fragments     Int, number of fragments into which to divide the
       drawn sequence
     - fragment_size Float (0->1) the proportion of the fragment height to
       draw in
     - track_size    Float (0->1) the proportion of the track height to
       draw in
     - drawing       Drawing canvas
     - drawn_tracks  List of ints denoting which tracks are to be drawn
     - current_track_level   Int denoting which track is currently being
       drawn
     - fragment_height   Float total fragment height in pixels
     - fragment_bases    Int total fragment length in bases
     - fragment_lines    Dictionary of top and bottom y-coords of fragment,
       keyed by fragment number
     - fragment_limits   Dictionary of start and end bases of each fragment,
       keyed by fragment number
     - track_offsets     Dictionary of number of pixels that each track top,
       center and bottom is offset from the base of a fragment, keyed by track
     - cross_track_links List of tuples each with four entries (track A,
       feature A, track B, feature B) to be linked.

    NA3	landscape皙?r   
         ?c                 C   s\   t | |||||||||	|
||| || _|dur|| _n| jdkr&d| _nd| _|| _dS )ax  Initialize.

        Arguments:
         - parent    Diagram object containing the data that the drawer draws
         - pagesize  String describing the ISO size of the image, or a tuple
           of pixels
         - orientation   String describing the required orientation of the
           final drawing ('landscape' or 'portrait')
         - x         Float (0->1) describing the relative size of the X
           margins to the page
         - y         Float (0->1) describing the relative size of the Y
           margins to the page
         - xl        Float (0->1) describing the relative size of the left X
           margin to the page (overrides x)
         - xl        Float (0->1) describing the relative size of the left X
           margin to the page (overrides x)
         - xr        Float (0->1) describing the relative size of the right X
           margin to the page (overrides x)
         - yt        Float (0->1) describing the relative size of the top Y
           margin to the page (overrides y)
         - yb        Float (0->1) describing the relative size of the lower Y
           margin to the page (overrides y)
         - start     Int, the position to begin drawing the diagram at
         - end       Int, the position to stop drawing the diagram at
         - tracklines    Boolean flag to show (or not) lines delineating tracks
           on the diagram
         - fragments Int, the number of equal fragments into which the
           sequence should be divided for drawing
         - fragment_size Float(0->1) The proportion of the available height
           for the fragment that should be taken up in drawing
         - track_size    The proportion of the available track height that
           should be taken up in drawing
         - cross_track_links List of tuples each with four entries (track A,
           feature A, track B, feature B) to be linked.
        Nr	   g?)r   __init__	fragmentsfragment_size
track_size)selfparentpagesizeorientationxyxlxrytybstartend
tracklinesr   r   r    cross_track_links r/   \/var/www/html/myenv/lib/python3.10/site-packages/Bio/Graphics/GenomeDiagram/_LinearDrawer.pyr   W   s.   7

zLinearDrawer.__init__c                    sJ  t  jd  jd  _g }g }g }g }g }g } j  _       jD ]@}| _ j| } 	|\}	}
|
|	 |
|
  |\}}|
| |
| |jri |\}}|
| |
| q)g } jD ]} |}|r}|
| qo|||||||g}|D ]}|D ]} fdd|D  qq jr   dS dS )z?Draw a linear diagram of the data in the parent Diagram object.r   r	   c                    s   g | ]} j |qS r/   )drawingadd).0elementr!   r/   r0   
<listcomp>   s    z%LinearDrawer.draw.<locals>.<listcomp>N)r   r#   r1   _parentget_drawn_levelsdrawn_tracksinit_fragmentsset_track_heightscurrent_track_leveldraw_greytrackappend
draw_trackscale
draw_scaler.   draw_cross_linkr-   draw_test_tracks)r!   feature_elementsfeature_labelsgreytrack_bgsgreytrack_labels
scale_axesscale_labelstrack_leveltrackgbgsglabelsfeaturesflabelsaxesslabelsfeature_cross_linkscross_link_objcross_link_elementselement_groupselement_groupelement_listr/   r5   r0   draw   sZ   










	zLinearDrawer.drawc           	      C   s   | j | j | _t| j| j | _i | _d| j d }| j}t	| jD ]}||| j  }|d| | j  }||f| j|< || j8 }q"i | _
| j}d}t	t| jt| jt|D ]}||| f| j
|< |d7 }qWdS )z:Initialize useful values for positioning diagram elements.r	      r   N)
pageheightr   fragment_heightr   lengthfragment_basesfragment_linesr   ylimrangefragment_limitsintr+   r,   )	r!   fragment_cropfragyfragmentfragtopfragbtmfragment_stepfragment_countmarkerr/   r/   r0   r:      s$    
zLinearDrawer.init_fragmentsc              	   C   s  t t | jd}t| j}d}i }d}t||d D ]&}z| j| j}W n ty/   d}Y nw ||7 }||| f||< ||7 }q| j| j | }i }	|d| j	  d }
|
dksZJ |D ]%}|| d | |
 }|| d | |
 }||| d  }|||f|	|< q\|	| _
dS )zSet track heights.

        Since tracks may not be of identical heights, the bottom and top
        offsets of each track relative to the fragment top and bottom is
        stored in a dictionary - self.track_offsets, keyed by track number.
        r	   r          @N)minr9   maxr`   r7   height	Exceptionr[   r   r    track_offsets)r!   	bot_track	top_tracktrackunit_sum
trackunitsheightholderrK   trackheighttrackunit_heightrp   
track_croptopbtmctrr/   r/   r0   r;     s2   


zLinearDrawer.set_track_heightsc                 C   s   | j  D ]u\}}| jt| j|| j|tjd | jt| j|| j|tjd | j	D ]M}|| j
| d  }|| j
| d  }|| j
| d  }| jt| j|| j|tjd | jt| j|| j|tjd | jt| j|| j|tjd q,qdS )zDraw test tracks.

        Draw red lines indicating the top and bottom of each fragment,
        and blue ones indicating tracks to be drawn.
        strokeColorr   r	   rY   N)r^   valuesr1   r2   r   x0xlimr   redr9   rp   bluegreen)r!   fbtmftoprK   trackbtmtrackctrtracktopr/   r/   r0   rC   1  s8   
zLinearDrawer.draw_test_tracksc                 C   sP   g }g }t | jt| ji}| D ]}||j |\}}||7 }||7 }q||fS )zDraw track.

        Arguments:
         - track     Track object

        Returns a tuple (list of elements in the track, list of labels in
        the track).
        )r   draw_feature_setr   draw_graph_setget_sets	__class__)r!   rK   track_elementstrack_labelsset_methodssetelementslabelsr/   r/   r0   r?   U  s   	
zLinearDrawer.draw_trackc                 C   s|  | j |kr|| jkrtd|| j | jf |j du s|j |kr)|jdu s4||jks4td||j |jf | |\}}|dksGJ d||f || j| d  }|| j7 }|| }	t||||	|jd}
|r|jdkr|dkrwt	|d d	 }n|d
krt	|d
 d }n	t	|}nt	|}t
dd||j|j|jd}t|}t|j}|d |d |d |d ||	f|_|
|fS d}|
|fS )a  Draw tick.

        Arguments:
         - tickpos   Int, position of the tick on the sequence
         - ctr       Float, Y co-ord of the center of the track
         - ticklen   How long to draw the tick
         - track     Track, the track the tick is drawn on
         - draw_label    Boolean, write the tick label?

        Returns a drawing element that is the tick on the scale
        z Tick at %i, but showing %i to %iNz*Tick at %i, but showing %r to %r for trackr   zFragment %i, tickpos %ir|   SInti@B z Mbpi  z KbpfontNamefontSize	fillColorr	   rY      )r+   r,   RuntimeErrorcanvas_locationr^   r   r   scale_colorscale_formatstrr   
scale_fontscale_fontsizer   r   scale_fontangle	transform)r!   tickposr{   ticklenrK   
draw_labelre   tickxtctrticktoptick
tickstringlabel
labelgrouprotationr/   r/   r0   	draw_tickj  sZ   




zLinearDrawer.draw_tickc           '      C   s<  g }g }|j sg g fS | j| j \}}}|| }|  \}}	| |\}
}| |	\}}t|
|d D ]l}|| j| d  }|| j| d  }|| j| d  }||
krW|}nd}||krs|}|t| j	| || j	| ||j
d n| j| j	 }|t| j	| || j	| ||j
d |t| j	| || j	| ||j
d q3|  \}}	|jr+|j| }t|j}t|| j|  t| j|D ]%}||ks|	|krq| |||||j\}}|| |dur|| q|j| }t|j}t|| j|  t| j|D ]*}||ks|	|krq | |||||j\}}|| |dur)|| q |jr| D ]}|jtu rg }g }g }| D ]Y}| }|d |d }} |jdu rp| | d }!||d || d qEt|j| | |j }"|j|" }|j|" } |j}!||!d ||d || d qEt|
|d D ]q}|| j| d  }|| j| d  }|| j| d  }||
kr|}nd}d||fd||fd||ffD ]4\}#}$t dd|#|j!|j"|j
d	}t#|}%t$|j%}&|&d |&d |&d
 |&d | j	| |$f|%_&||% qqq3||fS )zDraw scale.

        Argument:
         - track     Track object

        Returns a tuple of (list of elements in the scale, list of labels
        in the scale).
        r	   r   r|   N   rk   z.3f;r   rY   r   )'r@   rp   r<   _current_track_start_endr   r`   r^   r>   r   r   r   r   scale_ticksscale_largeticksrb   scale_largetick_intervalr+   r,   r   scale_largetick_labelsscale_smallticksscale_smalltick_intervalscale_smalltick_labelsaxis_labelsr   r   r   
get_graphs	quartilescenterrm   joinr   r   r   r   r   r   r   )'r!   rK   scale_elementsrI   rz   r{   ry   rv   r+   r,   start_fstart_xend_fend_xre   tbtmr   ttopx_leftx_rightr   tickitervalr   r   r   r   graph_label_mingraph_label_midgraph_label_maxgraphr   minvalmaxvalmidvaldiffvalposr   r   r/   r/   r0   rA     s  	















zLinearDrawer.draw_scalec              	   C   s  g }g }|j sg g fS | j| j \}}}|  \}}| |\}	}
| |\}}t|	|d D ]}|| j| d  }|| j| d  }|| j| d  }||	krV| j|
 }n| j}||krc| j| }n| j}t	||f||ft
ddd}|| |jr| j|j }tdd|j|j|j|jd}tt| jt| jt|D ]@}||	kr||
k rq||kr||| d  k rqt|}t|j}|d |d |d |d ||f|_| j| |ks|| qq/||fS )zDraw greytrack.

        Arguments:
         - track     Track object

        Put in a grey background to the current track in all fragments,
        if track specifies that we should.
        r	   r   gQ?r   rY   r   )	greytrackrp   r<   r   r   r`   r^   r   r   r   r   Colorr>   rG   	pagewidthr   namegreytrack_fontgreytrack_fontsizegreytrack_fontcolorrb   	getBoundsr   r   greytrack_font_rotationr   )r!   rK   rF   rG   rz   r{   ry   r+   r,   start_fragmentstart_offsetend_fragment
end_offsetre   r   r   r   x1x2box	labelstepr   r%   r   r   r/   r/   r0   r=   N  sj   	
 	

zLinearDrawer.draw_greytrackc                 C   sT   g }g }|  D ]}| |js| |jr%| |\}}||7 }||7 }q||fS )zDraw feature set.

        Arguments:
         - set       FeatureSet object

        Returns a tuple (list of elements describing features, list of
        labels for elements).
        )get_featuresis_in_boundsr+   r,   draw_feature)r!   r   rD   label_elementsfeaturerN   r   r/   r/   r0   r     s   
zLinearDrawer.draw_feature_setc                 C   s   |j rg g fS g }g }|  \}}|jD ]4\}}||k rqt||}||k r'qt||}| |||}|D ]\}	}
||	 |
durG||
 q5q||fS )zDraw feature.

        Arguments:
         - feature           Feature containing location info

        Returns tuple of (list of elements describing single feature, list
        of labels for those elements).
        N)hider   	locationsrm   rl   draw_feature_locationr>   )r!   r   rD   r   r+   r,   locstartlocendfeature_boxesr   r   r/   r/   r0   r     s(   	



zLinearDrawer.draw_featurec                 C   s   g }|  |\}}|  |\}}t| j }	||	v ru||	v ru||kr6| ||||\}
}||
|f |S |}|}| j| d |k rd| ||| j|\}
}|d7 }d}||
|f | j| d |k sC| |d||\}
}||
|f |S )zDraw feature location.r	   r   )r   listra   keysget_feature_sigilr>   r   )r!   r   r   r   r   r   r   r   r   allowed_fragmentsfeature_boxr   re   r+   r/   r/   r0   r     s4   	
z"LinearDrawer.draw_feature_locationc           *      C   s  |j }|j}|j}|j}| |s| |sdS | |s$| |s$dS || jk r,| j}|| jk r4| j}| j|k r<| j}| j|k rD| j}|t| j	j
 }|t| j	j
 }|dus`J |dusfJ ||krlt|jdur~||jk rxdS t||j}|jdur|j|k rdS t||j}|jdur||jk rdS t||j}|jdur|j|k rdS t||j}| j	 D ]}| j	| }	|	|kr|}
|	|kr|}q|
|krtt|j|j\}}t| j }| |\}}| |\}}||vs||vrdS | |\}}| |\}}||vs||vrdS g }tt||t||d D ]J}| j|
 \}}}|| j| d 7 }|| j| d 7 }|| j| d 7 }| j| \}}}|| j| d 7 }|| j| d 7 }|| j| d 7 }| j| d |k r| j| j }d} n| j| }d} | j| d |k r| j| j }!d}"n| j| }!d}"||k r| j| j }#|#}d}$n||kr| j| }#d}$n| j}#d}$||k r| j| j }%|%}!d}&n||kr| j| }%d}&n| j}%d}&||k r|}'|}(n|}'|}(||k s||k rg|jr||k r| j| j d|'|(  g})n>| jd|'|(  g})n4||k r=| j| j d|' d|(  | j| j d|' d|(  g})n| jd|' d|(  | jd|' d|(  g})|tt|#|'||'g|) ||ddd	 q$||k sq||k r|jr||k r| j| j d|'|(  g})n>| jd|'|(  g})n4||k r| j| j d|' d|(  | j| j d|' d|(  g})n| jd|' d|(  | jd|' d|(  g})|tt|%|(|!|(g|) ||ddd	 q$|jr
|$r| r|&r
|"s
|tt|#|'||'| jd|'|(  |!|(|%|(g
||ddd	 q$|jr<| r|$r|"r<|&s<|tt|#|'||'|!|(|%|(| j| j d|'|(  g
||ddd	 q$|jrX|tt|#|'||'|%|(|!|(g||ddd	 q$|tt|#|'||'|!|(|%|(g||ddd	 q$|S )
z%Draw cross-link between two features.Nr	   r   TF      ?gffffff?g333333?)r}   r   strokeLineJoinstrokewidth) startAstartBendAendBr   r+   r,   _trackAr   r7   tracksr~   _trackBNotImplementedErrorrm   rl   r8   r
   colorborderra   r   r   r`   rp   r^   r   r   flipr>   r   r   )*r!   
cross_linkr   r   r   r   	trackobjA	trackobjBrJ   rK   trackAtrackBstrokecolor	fillcolorr   start_fragmentAstart_offsetAend_fragmentAend_offsetAstart_fragmentBstart_offsetBend_fragmentBend_offsetBanswerre   btmActrAtopAbtmBctrBtopBxAecrop_rightAxBecrop_rightBxAs
crop_leftAxBs
crop_leftByAyBextrar/   r/   r0   rB     s  






































zLinearDrawer.draw_cross_linkc                 K   s  | j | | j | }}| j| j \}}}z|| j| d 7 }|| j| d 7 }|| j| d 7 }W nB tys   td t| j d| j  t| j t|d| |j	D ]\}	}
t| 
|	 t| 
|
 qXtd|   w | j| j| j| j| jd}||j }|j|d< |j|d< t|dr|j|d	< |j|d
< ||||||f|jj|j|jd|}|jr|j}n|jj}|jr=tdd|j|j|j|jd}t |}|dkr	t!|j"}|j#dv r|}n|j#dv r|| d }n|}|d |d |d |d ||f|_$||fS t!|j"d }|j#dv r|}n|j#dv r&|| d }n|}|d |d |d |d ||f|_$||fS d}||fS )ac  Get feature sigil.

        Arguments:
         - feature       Feature object
         - x0            Start X coordinate on diagram
         - x1            End X coordinate on diagram
         - fragment      The fragment on which the feature appears

        Returns a drawable indicator of the feature, and any required label
        for it.
        r   zWe've got a screw-up zFEATURE
)BOXARROWBIGARROWOCTOJAGGYhead_length_ratioshaft_height_ratiourlhrefURL	hrefTitle)strandr   r   r   )r,   z3'right)middler   centrerk   r	   rY   r      N)%r   rp   r<   r^   ro   printr+   r,   r]   r   r   _draw_sigil_box_draw_sigil_arrow_draw_sigil_big_arrow_draw_sigil_octo_draw_sigil_jaggysigilarrowhead_lengtharrowshaft_heighthasattrr)  r   locationr,  r   r   label_strandr   r   
label_font
label_sizelabel_colorr   r   label_anglelabel_positionr   )r!   r   r   r   re   kwargsrz   r{   ry   r   r   draw_methodsmethodr8  r,  r   r   r   r   r/   r/   r0   r     s   






	




zLinearDrawer.get_feature_sigilc                 C   s>   g }| j | j| jd}| D ]}|||j |7 }q|g fS )zDraw graph set.

        Arguments:
         - set       GraphSet object

        Returns tuple (list of graph elements, list of graph labels).
        )lineheatbar)draw_line_graphdraw_heat_graphdraw_bar_graphr   style)r!   r   r   style_methodsr   r/   r/   r0   r     s   	zLinearDrawer.draw_graph_setc                 C   s  g }|  }|d |d }}| j| j \}}}d||  }	|| }
|
dkr(|	}
|  \}}||| }|jdu r@|| d }n|j}t|| || }|d \}}| |\}}|| j7 }|	||  | | j| d  | }|}|D ]\}}| |\}}|| j7 }|	||  | | j| d  | }||kr|	t
|||||j|jd nB|	||  | | j| d  | }|	t
||| j||j|jd |	||  | | j| d  | }|	t
| j||||j|jd ||||f\}}}}qs|S )zsReturn a line graph as a list of drawable elements.

        Arguments:
         - graph     Graph object

        r   r   r   Nrk   )r}   strokeWidth)r   rp   r<   r   r   rm   r   r   r^   r>   r   poscolor	linewidthr   )r!   r   line_elementsdata_quartilesr   r   rz   r{   ry   rv   	dataranger+   r,   datar   
resolutionr   r   lastfraglastxlastylastvalfragr%   r&   tempyr/   r/   r0   rI    s   



zLinearDrawer.draw_line_graphc              	   C   s  g }|  }|d |d }}|| d }| j| j \}}}	|	| }
|  \}}t||||| }|s6g S |D ]\}}}| |\}}| |\}}| j| | j| }}t|j	|j
|||}||kr|| j| d krq| j}|	| j| d  }|| j| d  }|t||f||f|dd q8|}|}| j| d |kr|	| j| d  }|| j| d  }|t||f| j|f|dd |d7 }| j}| j| d |ks|	| j| d  }|| j| d  }|t| j|f||f|dd q8|S )z6Return a list of drawable elements for the heat graph.r   r   rk   r	   N)r   r   )r   rp   r<   r   r   r   r   r   linearlyInterpolatedColorrO  negcolorra   r   r^   r>   r   )r!   r   heat_elementsrR  r   r   r   rz   r{   ry   rv   r+   r,   rT  pos0pos1r   	fragment0r   	fragment1r   rG  r   r   re   r   r/   r/   r0   rJ  	  sX   zLinearDrawer.draw_heat_graphc                 C   s2  g }|  }|d |d }}| j| j \}}}d||  }	|| }
|
dkr(|	}
|| j| j }|jdu r<|| d }n|j}|  \}}t||||| }|sSg S t|| || }|dkrb|	}|D ]\}}}| 	|\}}| 	|\}}| j
| | j
| }}|	||  | }|dkr|j}n|j}||kr|| j| d kr| j}|| j| d  }||7 }|t||f||f|d qd|}|}| j| d |k r|| j| d  }|| }|t||f| j|f|d |d7 }| j
}| j| d |k s|| j| d  }||7 }|t| j
|f||f|d qd|S )z1Return list of drawable elements for a bar graph.r   r   r   Nrk   r	   )r   )r   rp   r<   r+   r,   r   r   r   rm   r   r   rO  r]  ra   r   r^   r>   r   )r!   r   bar_elementsrR  r   r   rz   r{   ry   rv   rS  rT  r   r+   r,   rU  r_  r`  r   ra  r   rb  r   barvalbarcolorr   re   
thisbarvalr/   r/   r0   rK  T  sd   
zLinearDrawer.draw_bar_graphc                 C   s   t || j }t || j }|dk r|}d}n|| jkr%| jd }| j}n|| j }|| jk s<J || j| j| j| jf| j| | j }||fS )a  Canvas location of a base on the genome.

        Arguments:
         - base      The base number on the genome sequence

        Returns the x-coordinate and fragment number of a base on the
        genome sequence, in the context of the current drawing setup
        r	   r   )rb   r+   r]   r   r,   r\   r   )r!   basere   base_offsetx_offsetr/   r/   r0   r     s$   	


zLinearDrawer.canvas_locationc           
      K   F   |dkr	|}|}	n|dkr|}|}	n|}|}	t ||f||	ffi |S )zDraw BOX sigil (PRIVATE).r	   r-  r   
r!   bottomr   ry   r   r   r,  rC  y1y2r/   r/   r0   r3       zLinearDrawer._draw_sigil_boxc           
      K   rj  )z:Draw OCTO sigil, a box with the corners cut off (PRIVATE).r	   r-  r   rk  r/   r/   r0   r6    ro  zLinearDrawer._draw_sigil_octoc	              	   K   s.  |dkr|}
|}d}n|dkr|}
|}d}n|}
|}d}t ||}t||}||
 }|| }t || |d }|}|}t||\}}g }t|D ]}|||
|| |  || |
|d | |  f qHt|D ]}|||
|| | |  || |
|| d | |  f qhtt|f|dd|d|	S )zDraw JAGGY sigil (PRIVATE).

        Although we may in future expose the head/tail jaggy lengths, for now
        both the left and right edges are drawn jagged.
        r	   rY   r-  r   r   )r}   rN  r   r   )rl   rm   r
   r`   extendr   r   )r!   rl  r   ry   r   r   r,  r   r   rC  rm  rn  teethxminxmaxrn   boxwidthtooth_length
headlength
taillengthr  pointsir/   r/   r0   r7    s\   

	zLinearDrawer._draw_sigil_jaggyc                 K   sV   |dkr|}|}	d}
n|dkr|}|}	d}
n|}|}	d}
t ||f||	ffd|
i|S )zDraw ARROW sigil (PRIVATE).r	   r.  r-  leftr$   r   )r!   rl  r   ry   r   r   r,  rC  rm  rn  r$   r/   r/   r0   r4    s   zLinearDrawer._draw_sigil_arrowc           	      K   s0   |dkrd}nd}t ||f||ffd|i|S )zADraw BIGARROW sigil, like ARROW but straddles the axis (PRIVATE).r-  rz  r.  r$   r   )	r!   rl  r   ry   r   r   r,  rC  r$   r/   r/   r0   r5  *  s   z"LinearDrawer._draw_sigil_big_arrow)Nr   r   r   r   NNNNNNr   r   Nr   N)N)__name__
__module____qualname____doc__r   rX   r:   r;   rC   r?   r   rA   r=   r   r   r   rB   r   r   rI  rJ  rK  r   r3  r6  r7  r4  r5  r/   r/   r/   r0   r   ,   s\    ,
UA%$> 'N 5  ubKQ
=r   N)r~  mathr   reportlab.graphics.shapesr   r   r   r   r   reportlab.libr   _AbstractDrawerr
   r   r   r   r   r   r   r   _FeatureSetr   	_GraphSetr   r   r/   r/   r/   r0   <module>   s&   	