a
    …¼Dfù ã                   @  sð  d dl mZ d dlZd dl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 z d dlZd dlZd	d
lmZ W n ey¦   dZdZdZY n0 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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$G d#d$„ d$eƒZ%d%d&„ Z&ed'd(„ ƒZ'd)d*„ Z(d+d,„ Z)d-d.„ Z*d/d0„ Z+d1d2„ Z,d3d4„ Z-d5d6„ Z.d7d8„ Z/d9d:„ Z0d;d<„ Z1d=d>„ Z2d?d@„ Z3dS )Aé    )ÚannotationsN)Úmemoize)ÚGlyph)Ú_build_map_onto_pixel_for_lineÚ_clipt)Ú
_PointLike)ÚisnullÚisrealÚngjit)Úcudaé   )Ú	cuda_argsc                   @  s`   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdd	„ Zed
d„ ƒZ	edd„ ƒZ
dd„ Zdd„ ZdS )Ú_AreaToLineLikez%Shared methods between Point and Linec                 C  s   || _ || _|| _d S ©N©ÚxÚyÚy_stack)Úselfr   r   r   © r   úc/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/datashader/glyphs/area.pyÚ__init__   s    z_AreaToLineLike.__init__c                 C  s   dS ©Né   r   ©r   r   r   r   Úndims   s    z_AreaToLineLike.ndimsc                 C  s   | j | j| jfS r   r   r   r   r   r   Úinputs    s    z_AreaToLineLike.inputsc                 C  s\   t |jt| jƒ ƒstdƒ‚n:t |jt| jƒ ƒs<tdƒ‚nt |jt| jƒ ƒsXtdƒ‚d S )Nzx must be realzy must be realzy_stack must be real or None)r	   ÚmeasureÚstrr   Ú
ValueErrorr   r   ©r   Ú	in_dshaper   r   r   Úvalidate$   s    

z_AreaToLineLike.validatec                 C  s   | j S r   ©r   r   r   r   r   Úx_label,   s    z_AreaToLineLike.x_labelc                 C  s   | j S r   ©r   r   r   r   r   Úy_label0   s    z_AreaToLineLike.y_labelc                 C  s   | j | j| jfS r   r   r   r   r   r   Úrequired_columns4   s    z _AreaToLineLike.required_columnsc                 C  s   |   || j ¡}|  |¡S r   )Ú_compute_boundsr   Úmaybe_expand_bounds©r   ÚdfÚboundsr   r   r   Úcompute_x_bounds7   s    z _AreaToLineLike.compute_x_boundsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r"   r$   r&   r'   r-   r   r   r   r   r      s   



r   c                   @  s0   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdS )	ÚAreaToZeroAxis0zèA filled area glyph.
    The area to be filled is the region from the line defined by ``x`` and
    ``y`` and the y=0 line

    Parameters
    ----------
    x, y
        Column names for the x and y coordinates of each vertex.
    c                 C  s6   |   || j ¡}t|d dƒt|d dƒf}|  |¡S ©Nr   r   )r(   r   ÚminÚmaxr)   r*   r   r   r   Úcompute_y_boundsG   s    z AreaToZeroAxis0.compute_y_boundsc                   sž   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …df ¡t |d d …df ¡f}t|d dƒt|d dƒf}ˆ  |¡ˆ  |¡fS )Nc              	     s\   t  t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ gg¡S r   )ÚnpÚarrayÚnanminr   ÚvaluesÚitemÚnanmaxr   ©r+   r   r   r   Ú<lambda>T   s
   üz5AreaToZeroAxis0.compute_bounds_dask.<locals>.<lambda>r   r   r   é   ©Úmap_partitionsÚcomputer8   r:   r=   r5   r6   r)   ©r   ÚddfÚrÚ	x_extentsÚ	y_extentsr   r   r   Úcompute_bounds_daskQ   s    ,,ÿz#AreaToZeroAxis0.compute_bounds_daskc                   sV   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰d‡ ‡‡‡‡‡fdd„	}
|
S )NTc                   s¬   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trlt|tjƒrlˆ |ˆ¡}ˆ |ˆ¡}ˆt|j ƒ }n|ˆ j}|ˆ j}ˆ }||||||	|
|||||g|¢R Ž  d S ©Nr   r   ©ÚshapeÚcudfÚ
isinstanceÚ	DataFrameÚto_cupy_arrayr   r;   ©Úaggsr+   Úvtr,   Ú
plot_startÚsxÚtxÚsyÚtyÚxminÚxmaxÚyminÚymaxÚaggs_and_colsÚxsÚysÚ	do_extend©Ú
extend_cpuÚextend_cudaÚinfor   Úx_nameÚy_namer   r   Úextends   s"    

ýýz-AreaToZeroAxis0._build_extend.<locals>.extend)T)Úexpand_aggs_and_colsr   Ú_build_draw_trapezoid_yÚ _build_extend_area_to_zero_axis0r   r   ©r   Zx_mapperZy_mapperrd   ÚappendZ_antialias_stage_2Z_antialias_stage_2_funcsrh   Úmap_onto_pixelÚdraw_trapezoid_yrg   r   ra   r   Ú_build_extendd   s    

ÿÿzAreaToZeroAxis0._build_extendN©r.   r/   r0   r1   r7   r   rI   ro   r   r   r   r   r3   <   s   


r3   c                   @  s0   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdS )	ÚAreaToLineAxis0a”  A filled area glyph
    The area to be filled is the region from the line defined by ``x`` and
    ``y[0]`` and the line defined by ``x`` and ``y[1]``.

    Parameters
    ----------
    x
        Column names for the x and y coordinates of each vertex.
    y
        List or tuple of length two containing the column names of the
        y-coordinates of the two curves that define the area region.
    c                 C  sN   |   || j ¡}|   || j ¡}t|d |d ƒt|d |d ƒf}|  |¡S r4   )r(   r   r   r5   r6   r)   )r   r+   Zbounds0Zbounds1r,   r   r   r   r7   ˜   s    $z AreaToLineAxis0.compute_y_boundsc                   sÒ   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …df ¡t |d d …df ¡f}t |d d …df ¡t |d d …df ¡f}t|d |d ƒt|d |d ƒf}ˆ  |¡ˆ  |¡fS )	Nc                   s„   t  t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ t  | ˆ j j¡ ¡ gg¡S r   )	r8   r9   r:   r   r;   r<   r=   r   r   r>   r   r   r   r?   ¥   s   úz5AreaToLineAxis0.compute_bounds_dask.<locals>.<lambda>r   r   r   r@   é   é   rA   )r   rE   rF   rG   Z
y0_extentsZ
y1_extentsrH   r   r   r   rI   £   s    	,,,ÿÿz#AreaToLineAxis0.compute_bounds_daskc                   s^   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰ˆj‰d‡ ‡‡‡‡‡‡fdd„	}
|
S )NTc                   sÄ   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trxt|tjƒrxˆ |ˆ¡}ˆ |ˆ¡}ˆ |ˆ¡}ˆt|j ƒ }n"|ˆ j}|ˆ j}|ˆ j}ˆ }||||||	|
||||||g|¢R Ž  d S rJ   rK   ©rR   r+   rS   r,   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   Úys0Úys1r`   ©rb   rc   rd   r   re   rf   Úy_stack_namer   r   rg   È   s$    


þþz-AreaToLineAxis0._build_extend.<locals>.extend)T)rh   r   ri   Ú _build_extend_area_to_line_axis0r   r   r   rk   r   rw   r   ro   ¹   s    

ÿÿzAreaToLineAxis0._build_extendNrp   r   r   r   r   rq   Š   s   
rq   c                   @  s\   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZdS )ÚAreaToZeroAxis0Multic                   sF   t ‡ fdd„| jD ƒƒs"tdƒ‚n t ‡ fdd„| jD ƒƒsBtdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   ©r	   r   r   ©Ú.0Zxcol©r!   r   r   Ú
<listcomp>â   ó    z1AreaToZeroAxis0Multi.validate.<locals>.<listcomp>úx columns must be realc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   ©r}   Zycolr~   r   r   r   å   r€   úy columns must be real)Úallr   r   r   r    r   r~   r   r"   á   s    
ÿzAreaToZeroAxis0Multi.validatec                 C  s   dS ©Nr   r   r   r   r   r   r$   è   s    zAreaToZeroAxis0Multi.x_labelc                 C  s   dS ©Nr   r   r   r   r   r   r&   ì   s    zAreaToZeroAxis0Multi.y_labelc                 C  s   | j | j S r   ©r   r   r   r   r   r   r'   ð   s    z%AreaToZeroAxis0Multi.required_columnsc                   s8   ‡ ‡fdd„ˆj D ƒ}t|Ž \}}ˆ t|ƒt|ƒf¡S )Nc                   s   g | ]}ˆ  ˆ | ¡‘qS r   ©r(   ©r}   r   ©r+   r   r   r   r   ô   s   ÿz9AreaToZeroAxis0Multi.compute_x_bounds.<locals>.<listcomp>©r   Úzipr)   r5   r6   ©r   r+   Úbounds_listÚminsÚmaxesr   rŠ   r   r-   ó   s
    ÿz%AreaToZeroAxis0Multi.compute_x_boundsc                   sL   ‡ ‡fdd„ˆj D ƒ}t|Ž \}}tdt|ƒƒ}tdt|ƒƒ}ˆ ||f¡S )Nc                   s   g | ]}ˆ  ˆ | ¡‘qS r   rˆ   ©r}   r   rŠ   r   r   r   ú   s   ÿz9AreaToZeroAxis0Multi.compute_y_bounds.<locals>.<listcomp>r   )r   rŒ   r5   r6   r)   )r   r+   rŽ   r   r   ÚmnÚmxr   rŠ   r   r7   ù   s    ÿz%AreaToZeroAxis0Multi.compute_y_boundsc                   sž   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …df ¡t |d d …df ¡f}td|d ƒtd|d ƒf}ˆ  |¡ˆ  |¡fS )Nc              
     sl   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   ©r8   r:   r;   r<   ©r}   Úcr>   r   r   r     r€   zNAreaToZeroAxis0Multi.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   ©r8   r=   r;   r<   r•   r>   r   r   r     r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   	  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   
  r€   ©r8   r9   r:   r   r=   r   r>   r   r>   r   r?     s
   üz:AreaToZeroAxis0Multi.compute_bounds_dask.<locals>.<lambda>r   r   r   r@   rA   rD   r   r   r   rI     s    ,,ÿz(AreaToZeroAxis0Multi.compute_bounds_daskc                   sV   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰d‡ ‡‡‡‡‡fdd„	}
|
S )NTc                   sÌ   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trlt|tjƒrlˆ |ˆ¡}ˆ |ˆ¡}ˆt|j ƒ }n8|jd d …tˆƒf  ¡ }|jd d …tˆƒf  ¡ }ˆ }||||||	|
|||||g|¢R Ž  d S rJ   ©	rL   rM   rN   rO   rP   r   ÚlocÚlistÚto_numpyrQ   ©rb   rc   rd   r   Úx_namesÚy_namesr   r   rg   %  s     þþz2AreaToZeroAxis0Multi._build_extend.<locals>.extend)T)rh   r   ri   Ú&_build_extend_area_to_zero_axis0_multir   r   rk   r   r   r   ro     s    

ÿÿz"AreaToZeroAxis0Multi._build_extendN©r.   r/   r0   r"   r2   r$   r&   r'   r-   r7   r   rI   ro   r   r   r   r   rz   à   s   



rz   c                   @  s\   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZdS )ÚAreaToLineAxis0Multic                   sh   t ‡ fdd„| jD ƒƒs"tdƒ‚nBt ‡ fdd„| jD ƒƒsDtdƒ‚n t ‡ fdd„| jD ƒƒsdtdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r|   r~   r   r   r   =  r€   z1AreaToLineAxis0Multi.validate.<locals>.<listcomp>r   c                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r   @  r€   rƒ   c                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r   C  s   ÿúy_stack columns must be real)r„   r   r   r   r   r    r   r~   r   r"   <  s    
ÿ

ÿÿzAreaToLineAxis0Multi.validatec                 C  s   dS r…   r   r   r   r   r   r$   G  s    zAreaToLineAxis0Multi.x_labelc                 C  s   dS r†   r   r   r   r   r   r&   K  s    zAreaToLineAxis0Multi.y_labelc                 C  s   | j | j | j S r   r   r   r   r   r   r'   O  s    z%AreaToLineAxis0Multi.required_columnsc                   s8   ‡ ‡fdd„ˆj D ƒ}t|Ž \}}ˆ t|ƒt|ƒf¡S )Nc                   s   g | ]}ˆ  ˆ | ¡‘qS r   rˆ   r‰   rŠ   r   r   r   S  s   ÿz9AreaToLineAxis0Multi.compute_x_bounds.<locals>.<listcomp>r‹   r   r   rŠ   r   r-   R  s
    ÿz%AreaToLineAxis0Multi.compute_x_boundsc                   s>   ‡ ‡fdd„ˆj ˆj D ƒ}t|Ž \}}ˆ t|ƒt|ƒf¡S )Nc                   s   g | ]}ˆ  ˆ | ¡‘qS r   rˆ   r‘   rŠ   r   r   r   Y  s   ÿz9AreaToLineAxis0Multi.compute_y_bounds.<locals>.<listcomp>©r   r   rŒ   r)   r5   r6   r   r   rŠ   r   r7   X  s
    
ÿz%AreaToLineAxis0Multi.compute_y_boundsc                   sŠ   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …ddgf ¡t |d d …ddgf ¡f}ˆ  |¡ˆ  |¡fS )	Nc                   sœ   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   c  r€   zNAreaToLineAxis0Multi.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   d  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   e  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   f  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   g  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   h  r€   ©r8   r9   r:   r   r=   r   r   r>   r   r>   r   r?   b  s   úz:AreaToLineAxis0Multi.compute_bounds_dask.<locals>.<lambda>r   r   r   rr   r@   rs   ©rB   rC   r8   r:   r=   r)   rD   r   r   r   rI   _  s    
,4ÿz(AreaToLineAxis0Multi.compute_bounds_daskc                   s^   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰ˆj‰d‡ ‡‡‡‡‡‡fdd„	}
|
S )NTc                   sô   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trxt|tjƒrxˆ |ˆ¡}ˆ |ˆ¡}ˆ |ˆ¡}ˆt|j ƒ }nR|jd d …tˆƒf  ¡ }|jd d …tˆƒf  ¡ }|jd d …tˆƒf  ¡ }ˆ }||||||	|
||||||g|¢R Ž  d S rJ   r™   rt   ©rb   rc   rd   r   rž   rŸ   Úy_stack_namesr   r   rg     s$    þþz2AreaToLineAxis0Multi._build_extend.<locals>.extend)T)rh   r   ri   Ú&_build_extend_area_to_line_axis0_multir   r   r   rk   r   r§   r   ro   r  s    

ÿÿz"AreaToLineAxis0Multi._build_extendNr¡   r   r   r   r   r¢   ;  s   


r¢   c                   @  s\   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	d
„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZdS )ÚAreaToZeroAxis1c                   sž   t ‡ fdd„| jD ƒƒs"tdƒ‚n t ‡ fdd„| jD ƒƒsBtdƒ‚t‡ fdd„| jD ƒƒ}t|ƒdkrntd	ƒ‚t‡ fd
d„| jD ƒƒ}t|ƒdkrštdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r|   r~   r   r   r   ›  s   ÿz,AreaToZeroAxis1.validate.<locals>.<listcomp>r   c                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r   ž  s   ÿrƒ   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   ©r   r   r|   r~   r   r   Ú	<genexpr>¢  s   ÿz+AreaToZeroAxis1.validate.<locals>.<genexpr>r   ú&x columns must have the same data typec                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r‚   r~   r   r   r¬   §  s   ÿú&y columns must have the same data type)r„   r   r   r   ÚsetÚlen)r   r!   Úunique_x_measuresÚunique_y_measuresr   r~   r   r"   š  s$    ÿ
ÿÿÿzAreaToZeroAxis1.validatec                 C  s   | j | j S r   r‡   r   r   r   r   r'   ¬  s    z AreaToZeroAxis1.required_columnsc                 C  s   dS r…   r   r   r   r   r   r$   ¯  s    zAreaToZeroAxis1.x_labelc                 C  s   dS r†   r   r   r   r   r   r&   ³  s    zAreaToZeroAxis1.y_labelc                   sL   t ‡ fdd„ˆjD ƒƒ}‡fdd„|D ƒ}t|Ž \}}ˆ t|ƒt|ƒf¡S )Nc                 3  s   | ]}ˆ | V  qd S r   r   ©r}   Zxlabelr>   r   r   r¬   ¸  r€   z3AreaToZeroAxis1.compute_x_bounds.<locals>.<genexpr>c                   s   g | ]}ˆ   |¡‘qS r   rˆ   r|   r   r   r   r   º  r€   z4AreaToZeroAxis1.compute_x_bounds.<locals>.<listcomp>©Útupler   rŒ   r)   r5   r6   ©r   r+   r^   rŽ   r   r   r   rŠ   r   r-   ·  s    z AreaToZeroAxis1.compute_x_boundsc                   s`   t ‡ fdd„ˆjD ƒƒ}‡fdd„|D ƒ}t|Ž \}}tdt|ƒƒ}tdt|ƒƒ}ˆ ||f¡S )Nc                 3  s   | ]}ˆ | V  qd S r   r   )r}   Zylabelr>   r   r   r¬   À  r€   z3AreaToZeroAxis1.compute_y_bounds.<locals>.<genexpr>c                   s   g | ]}ˆ   |¡‘qS r   rˆ   r‚   r   r   r   r   Â  r€   z4AreaToZeroAxis1.compute_y_bounds.<locals>.<listcomp>r   )rµ   r   rŒ   r5   r6   r)   )r   r+   r_   rŽ   r   r   r’   r“   r   rŠ   r   r7   ¿  s    z AreaToZeroAxis1.compute_y_boundsc                   sž   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …df ¡t |d d …df ¡f}td|d ƒtd|d ƒf}ˆ  |¡ˆ  |¡fS )Nc              
     sl   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   Ï  r€   zIAreaToZeroAxis1.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   Ð  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   Ñ  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   Ò  r€   r˜   r>   r   r>   r   r?   Î  s
   üz5AreaToZeroAxis1.compute_bounds_dask.<locals>.<lambda>r   r   r   r@   rA   rD   r   r   r   rI   Ë  s    ,,ÿz#AreaToZeroAxis1.compute_bounds_daskc                   sV   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰d‡ ‡‡‡‡‡fdd„	}
|
S )NTc                   sÒ   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trtt|tjƒrtˆ |tˆƒ¡}ˆ |tˆƒ¡}ˆt|j ƒ }n8|jd d …tˆƒf  ¡ }|jd d …tˆƒf  ¡ }ˆ }||||||	|
||||g
|¢R Ž  d S rJ   ©	rL   rM   rN   rO   rP   r›   r   rš   rœ   rQ   r   r   r   rg   î  s    ÿÿz-AreaToZeroAxis1._build_extend.<locals>.extend)T)rh   r   ri   Ú._build_extend_area_to_zero_axis1_none_constantr   r   rk   r   r   r   ro   Þ  s    

ÿÿzAreaToZeroAxis1._build_extendN©r.   r/   r0   r"   r'   r2   r$   r&   r-   r7   r   rI   ro   r   r   r   r   rª   ™  s   


rª   c                   @  s\   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	d
„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZdS )ÚAreaToLineAxis1c                   sì   t ‡ fdd„| jD ƒƒs"tdƒ‚nBt ‡ fdd„| jD ƒƒsDtdƒ‚n t ‡ fdd„| jD ƒƒsdtdƒ‚t‡ fdd	„| jD ƒƒ}t|ƒd
krtdƒ‚t‡ fdd	„| jD ƒƒ}t|ƒd
kr¼tdƒ‚t‡ fdd	„| jD ƒƒ}t|ƒd
krètdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r|   r~   r   r   r     s   ÿz,AreaToLineAxis1.validate.<locals>.<listcomp>r   c                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r     s   ÿrƒ   c                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r     s   ÿr£   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r|   r~   r   r   r¬     s   ÿz+AreaToLineAxis1.validate.<locals>.<genexpr>r   r­   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r‚   r~   r   r   r¬     s   ÿr®   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r‚   r~   r   r   r¬     s   ÿú,y_stack columns must have the same data type)r„   r   r   r   r   r¯   r°   )r   r!   r±   r²   Úunique_y_stack_measuresr   r~   r   r"     s6    ÿ
ÿ
ÿÿÿÿzAreaToLineAxis1.validatec                 C  s   | j | j | j S r   r   r   r   r   r   r'     s    z AreaToLineAxis1.required_columnsc                 C  s   dS r…   r   r   r   r   r   r$   !  s    zAreaToLineAxis1.x_labelc                 C  s   dS r†   r   r   r   r   r   r&   %  s    zAreaToLineAxis1.y_labelc                   sL   t ‡ fdd„ˆjD ƒƒ}‡fdd„|D ƒ}t|Ž \}}ˆ t|ƒt|ƒf¡S )Nc                 3  s   | ]}ˆ | V  qd S r   r   r³   r>   r   r   r¬   *  r€   z3AreaToLineAxis1.compute_x_bounds.<locals>.<genexpr>c                   s   g | ]}ˆ   |¡‘qS r   rˆ   r|   r   r   r   r   ,  r€   z4AreaToLineAxis1.compute_x_bounds.<locals>.<listcomp>r´   r¶   r   rŠ   r   r-   )  s    z AreaToLineAxis1.compute_x_boundsc                   s>   ‡ ‡fdd„ˆj ˆj D ƒ}t|Ž \}}ˆ t|ƒt|ƒf¡S )Nc                   s   g | ]}ˆ  ˆ | ¡‘qS r   rˆ   r‘   rŠ   r   r   r   2  s   ÿz4AreaToLineAxis1.compute_y_bounds.<locals>.<listcomp>r¤   r   r   rŠ   r   r7   1  s
    
ÿz AreaToLineAxis1.compute_y_boundsc                   sŠ   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …ddgf ¡t |d d …ddgf ¡f}ˆ  |¡ˆ  |¡fS )	Nc                   sœ   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   <  r€   zIAreaToLineAxis1.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   =  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   >  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   ?  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   @  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   A  r€   r¥   r>   r   r>   r   r?   ;  s   úz5AreaToLineAxis1.compute_bounds_dask.<locals>.<lambda>r   r   r   rr   r@   rs   r¦   rD   r   r   r   rI   8  s    
,4ÿz#AreaToLineAxis1.compute_bounds_daskc                   s^   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰ˆj‰d‡ ‡‡‡‡‡‡fdd„	}
|
S )NTc                   sþ   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }tr„t|tjƒr„ˆ |tˆƒ¡}ˆ |tˆƒ¡}ˆ |tˆƒ¡}ˆt|j ƒ }nR|jd d …tˆƒf  ¡ }|jd d …tˆƒf  ¡ }|jd d …tˆƒf  ¡ }ˆ }||||||	|
|||||g|¢R Ž  d S rJ   r·   )rR   r+   rS   r,   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   Úy_stacksr`   r§   r   r   rg   Z  s$    þþz-AreaToLineAxis1._build_extend.<locals>.extend)T)rh   r   ri   Ú._build_extend_area_to_line_axis1_none_constantr   r   r   rk   r   r§   r   ro   K  s    

ÿÿzAreaToLineAxis1._build_extendNr¹   r   r   r   r   rº     s   


rº   c                   @  s<   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZed	d
„ ƒZdS )ÚAreaToZeroAxis1XConstantc                   sP   t ‡ fdd„| jD ƒƒs tdƒ‚t‡ fdd„| jD ƒƒ}t|ƒdkrLtdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r   t  r€   z5AreaToZeroAxis1XConstant.validate.<locals>.<listcomp>rƒ   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r‚   r~   r   r   r¬   w  s   ÿz4AreaToZeroAxis1XConstant.validate.<locals>.<genexpr>r   r®   )r„   r   r   r¯   r°   )r   r!   r²   r   r~   r   r"   s  s    ÿz!AreaToZeroAxis1XConstant.validatec                 C  s   | j S r   r%   r   r   r   r   r'   |  s    z)AreaToZeroAxis1XConstant.required_columnsc                 G  s&   t  | j¡}t  | j¡}|  ||f¡S r   ©r8   r:   r   r=   r)   ©r   ÚargsZx_minZx_maxr   r   r   r-     s    z)AreaToZeroAxis1XConstant.compute_x_boundsc                   sT   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}ˆ  ¡ ˆ  |¡fS )Nc                   s<   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   ˆ  r€   zRAreaToZeroAxis1XConstant.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   ‰  r€   )r8   r9   r:   r   r=   r>   r   r>   r   r?   ‡  s   þz>AreaToZeroAxis1XConstant.compute_bounds_dask.<locals>.<lambda>r   r   ©rB   rC   r8   r:   r=   r-   r)   ©r   rE   rF   rH   r   r   r   rI   „  s
    ,ÿz,AreaToZeroAxis1XConstant.compute_bounds_daskc                   sV   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰d‡ ‡‡‡‡‡fdd„	}
|
S )NTc                   s¨   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trdt|tjƒrdˆ |tˆƒ¡}ˆt|j ƒ }n|jd d …tˆƒf  ¡ }ˆ }||||||	|
||ˆ|g
|¢R Ž  d S rJ   r·   )rR   r+   rS   r,   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r_   r`   ©rb   rc   rd   r   Úx_valuesrŸ   r   r   rg      s    ýýz6AreaToZeroAxis1XConstant._build_extend.<locals>.extend)T)rh   r   ri   Ú+_build_extend_area_to_zero_axis1_x_constantr   r   rk   r   rÅ   r   ro   ‘  s    

ÿÿz&AreaToZeroAxis1XConstant._build_extendN©	r.   r/   r0   r"   r'   r-   r   rI   ro   r   r   r   r   r¿   r  s   	
r¿   c                   @  s<   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZed	d
„ ƒZdS )ÚAreaToLineAxis1XConstantc                   sœ   t ‡ fdd„| jD ƒƒs tdƒ‚t ‡ fdd„| jD ƒƒs@tdƒ‚t‡ fdd„| jD ƒƒ}t|ƒdkrltd	ƒ‚t‡ fd
d„| jD ƒƒ}t|ƒdkr˜tdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r   ·  s   ÿz5AreaToLineAxis1XConstant.validate.<locals>.<listcomp>rƒ   c                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r‚   r~   r   r   r   »  s   ÿr£   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r‚   r~   r   r   r¬   ¿  s   ÿz4AreaToLineAxis1XConstant.validate.<locals>.<genexpr>r   r®   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r‚   r~   r   r   r¬   Ä  s   ÿr»   )r„   r   r   r   r¯   r°   )r   r!   r²   r¼   r   r~   r   r"   ¶  s$    ÿÿÿÿz!AreaToLineAxis1XConstant.validatec                 C  s   | j | j S r   )r   r   r   r   r   r   r'   É  s    z)AreaToLineAxis1XConstant.required_columnsc                 G  s&   t  | j¡}t  | j¡}|  ||f¡S r   rÀ   rÁ   r   r   r   r-   Ì  s    z)AreaToLineAxis1XConstant.compute_x_boundsc                   s\   |  ‡ fdd„¡ ¡ }t |d d …ddgf ¡t |d d …ddgf ¡f}ˆ  ¡ ˆ  |¡fS )Nc              
     sl   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   Õ  r€   zRAreaToLineAxis1XConstant.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   Ö  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   ×  r€   c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   Ø  r€   )r8   r9   r:   r   r=   r   r>   r   r>   r   r?   Ô  s
   üz>AreaToLineAxis1XConstant.compute_bounds_dask.<locals>.<lambda>r   r   r   r@   rÃ   rÄ   r   r   r   rI   Ñ  s
    4ÿz,AreaToLineAxis1XConstant.compute_bounds_daskc                   s^   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰ˆj‰d‡ ‡‡‡‡‡‡fdd„	}
|
S )NTc                   sÔ   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trtt|tjƒrtˆ |tˆƒ¡}ˆ |tˆƒ¡}ˆt|j ƒ }n8|jd d …tˆƒf  ¡ }|jd d …tˆƒf  ¡ }ˆ }||||||	|
||ˆ||g|¢R Ž  d S rJ   r·   )rR   r+   rS   r,   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r_   r½   r`   ©rb   rc   rd   r   rÆ   rŸ   r¨   r   r   rg   ñ  s"    ýýz6AreaToLineAxis1XConstant._build_extend.<locals>.extend)T)rh   r   ri   Ú+_build_extend_area_to_line_axis1_x_constantr   r   r   rk   r   rÊ   r   ro   á  s    

ÿÿz&AreaToLineAxis1XConstant._build_extendNrÈ   r   r   r   r   rÉ   µ  s   
rÉ   c                   @  s<   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZed	d
„ ƒZdS )ÚAreaToZeroAxis1YConstantc                   sP   t ‡ fdd„| jD ƒƒs tdƒ‚t‡ fdd„| jD ƒƒ}t|ƒdkrLtdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r|   r~   r   r   r   
  r€   z5AreaToZeroAxis1YConstant.validate.<locals>.<listcomp>r   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r|   r~   r   r   r¬     s   ÿz4AreaToZeroAxis1YConstant.validate.<locals>.<genexpr>r   r­   ©r„   r   r   r¯   r°   ©r   r!   r±   r   r~   r   r"   	  s    ÿz!AreaToZeroAxis1YConstant.validatec                 C  s   | j S r   r#   r   r   r   r   r'     s    z)AreaToZeroAxis1YConstant.required_columnsc                 G  s&   t  | j¡}t  | j¡}|  ||f¡S r   )r8   r:   r   r=   r)   ©r   rÂ   Zy_minZy_maxr   r   r   r7     s    z)AreaToZeroAxis1YConstant.compute_y_boundsc                   sT   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}ˆ  |¡ˆ  ¡ fS )Nc                   s<   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r     r€   zRAreaToZeroAxis1YConstant.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r     r€   ©r8   r9   r:   r   r=   r>   r   r>   r   r?     s   þz>AreaToZeroAxis1YConstant.compute_bounds_dask.<locals>.<lambda>r   r   ©rB   rC   r8   r:   r=   r)   r7   ©r   rE   rF   rG   r   r   r   rI     s
    ,ÿz,AreaToZeroAxis1YConstant.compute_bounds_daskc                   sV   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰d‡ ‡‡‡‡‡fdd„	}
|
S )NTc                   s¶   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trnt|tjƒrnˆ |tˆƒ¡}t ˆ¡}ˆt|j ƒ }n"|j	d d …tˆƒf  
¡ }ˆ}ˆ }||||||	|
||||g
|¢R Ž  d S rJ   ©rL   rM   rN   rO   rP   r›   ÚcpZasarrayr   rš   rœ   rQ   ©rb   rc   rd   r   rž   Úy_valuesr   r   rg   6  s"    
ýýz6AreaToZeroAxis1YConstant._build_extend.<locals>.extend)T)rh   r   ri   Ú+_build_extend_area_to_zero_axis1_y_constantr   r   rk   r   rÕ   r   ro   '  s    

ÿÿz&AreaToZeroAxis1YConstant._build_extendN©	r.   r/   r0   r"   r'   r7   r   rI   ro   r   r   r   r   rÌ     s   	
rÌ   c                   @  s<   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZed	d
„ ƒZdS )ÚAreaToLineAxis1YConstantc                   sP   t ‡ fdd„| jD ƒƒs tdƒ‚t‡ fdd„| jD ƒƒ}t|ƒdkrLtdƒ‚d S )Nc                   s   g | ]}t ˆ jt|ƒ ƒ‘qS r   r{   r|   r~   r   r   r   O  r€   z5AreaToLineAxis1YConstant.validate.<locals>.<listcomp>r   c                 3  s   | ]}ˆ j t|ƒ V  qd S r   r«   r|   r~   r   r   r¬   R  s   ÿz4AreaToLineAxis1YConstant.validate.<locals>.<genexpr>r   r­   rÍ   rÎ   r   r~   r   r"   N  s    ÿz!AreaToLineAxis1YConstant.validatec                 C  s   | j S r   r#   r   r   r   r   r'   W  s    z)AreaToLineAxis1YConstant.required_columnsc                 G  sB   t t | j¡t | j¡ƒ}tt | j¡t | j¡ƒ}|  ||f¡S r   )r5   r8   r:   r   r   r6   r=   r)   rÏ   r   r   r   r7   Z  s    z)AreaToLineAxis1YConstant.compute_y_boundsc                   sT   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}ˆ  |¡ˆ  ¡ fS )Nc                   s<   t  t  ‡ fdd„ˆjD ƒ¡t  ‡ fdd„ˆjD ƒ¡gg¡S )Nc                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r”   r•   r>   r   r   r   c  r€   zRAreaToLineAxis1YConstant.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  ˆ | j¡ ¡ ‘qS r   r—   r•   r>   r   r   r   d  r€   rÐ   r>   r   r>   r   r?   b  s   þz>AreaToLineAxis1YConstant.compute_bounds_dask.<locals>.<lambda>r   r   rÑ   rÒ   r   r   r   rI   _  s
    ,ÿz,AreaToLineAxis1YConstant.compute_bounds_daskc                   s^   ˆ  |¡}t||ƒ}t|||ƒ}	t|	|ƒ\‰ ‰ˆj‰ˆj‰ˆj‰d‡ ‡‡‡‡‡‡fdd„	}
|
S )NTc                   sÆ   |\}}}}|\}	}
}}| ˆ|| d j d d… ƒ }trxt|tjƒrxˆ |tˆƒ¡}t ˆ¡}t ˆ¡}ˆt|j ƒ }n&|j	d d …tˆƒf  
¡ }ˆ}ˆ}ˆ }||||||	|
|||||g|¢R Ž  d S rJ   rÓ   )rR   r+   rS   r,   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   Zysvr`   ©rb   rc   rd   r   rž   Zy_stack_valuesrÖ   r   r   rg   {  s&    

ýýz6AreaToLineAxis1YConstant._build_extend.<locals>.extend)T)rh   r   ri   Ú+_build_extend_area_to_line_axis1_y_constantr   r   r   rk   r   rÚ   r   ro   l  s    

ÿÿz&AreaToLineAxis1YConstant._build_extendNrØ   r   r   r   r   rÙ   M  s   	
rÙ   c                   @  sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZedd„ ƒZ	dS )ÚAreaToZeroAxis1Raggedc                 C  sj   zddl m} W n ty*   td ƒ}Y n0 t|t| jƒ |ƒsJtdƒ‚nt|t| jƒ |ƒsftdƒ‚d S )Nr   ©ÚRaggedDtypeúx must be a RaggedArrayúy must be a RaggedArray)	Údatashader.datatypesrÞ   ÚImportErrorÚtyperN   r   r   r   r   ©r   r!   rÞ   r   r   r   r"   •  s    
zAreaToZeroAxis1Ragged.validatec                 C  s   | j | jfS r   r‡   r   r   r   r   r'      s    z&AreaToZeroAxis1Ragged.required_columnsc                 C  s   |   || j jj¡}|  |¡S r   ©r(   r   r9   Ú
flat_arrayr)   r*   r   r   r   r-   £  s    z&AreaToZeroAxis1Ragged.compute_x_boundsc                 C  s:   |   || j jj¡}t|d dƒt|d dƒf}|  |¡S r4   )r(   r   r9   ræ   r5   r6   r)   r*   r   r   r   r7   §  s    z&AreaToZeroAxis1Ragged.compute_y_boundsc                   sž   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …df ¡t |d d …df ¡f}t|d dƒt|d dƒf}ˆ  |¡ˆ  |¡fS )Nc              	     sd   t  t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ gg¡S r   )r8   r9   r:   r   ræ   r<   r=   r   r>   r   r   r   r?   ²  s
   üz;AreaToZeroAxis1Ragged.compute_bounds_dask.<locals>.<lambda>r   r   r   r@   rA   rD   r   r   r   rI   ¯  s    ,,ÿz)AreaToZeroAxis1Ragged.compute_bounds_daskc                   sN   |   |¡}t||ƒ}t|||ƒ}	t|	|ƒ‰| j‰| j‰d‡ ‡‡‡fdd„	}
|
S )NTc                   sn   |\}}}}|\}	}
}}|ˆ j }|ˆ j }| ˆ || d jd d… ƒ }ˆ|||||	|
||||g
|¢R Ž  d S rJ   ©r;   rL   )rR   r+   rS   r,   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r^   r_   r]   ©rd   Zperform_extend_cpure   rf   r   r   rg   Ð  s    

ýýz3AreaToZeroAxis1Ragged._build_extend.<locals>.extend)T)rh   r   ri   Ú'_build_extend_area_to_zero_axis1_raggedr   r   rk   r   rè   r   ro   Â  s    

ÿÿz#AreaToZeroAxis1Ragged._build_extendN©
r.   r/   r0   r"   r'   r-   r7   r   rI   ro   r   r   r   r   rÜ   ”  s   
rÜ   c                   @  sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZedd„ ƒZ	dS )ÚAreaToLineAxis1Raggedc                 C  sˆ   zddl m} W n ty*   td ƒ}Y n0 t|t| jƒ |ƒsJtdƒ‚n:t|t| jƒ |ƒshtdƒ‚nt|t| j	ƒ |ƒs„tdƒ‚d S )Nr   rÝ   rß   rà   zy_stack must be a RaggedArray)
rá   rÞ   râ   rã   rN   r   r   r   r   r   rä   r   r   r   r"   á  s    

zAreaToLineAxis1Ragged.validatec                 C  s   | j | j| jfS r   r   r   r   r   r   r'   î  s    z&AreaToLineAxis1Ragged.required_columnsc                 C  s   |   || j jj¡}|  |¡S r   rå   r*   r   r   r   r-   ñ  s    z&AreaToLineAxis1Ragged.compute_x_boundsc                 C  sZ   |   || j jj¡}|   || j jj¡}t|d |d dƒt|d |d dƒf}|  |¡S r4   )r(   r   r9   ræ   r   r5   r6   r)   )r   r+   Zbounds_yZbounds_y_stackr,   r   r   r   r7   õ  s    ÿÿz&AreaToLineAxis1Ragged.compute_y_boundsc                   sŠ   |  ‡ fdd„¡ ¡ }t |d d …df ¡t |d d …df ¡f}t |d d …ddgf ¡t |d d …ddgf ¡f}ˆ  |¡ˆ  |¡fS )	Nc                   s   t  t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ t  | ˆ j jj¡ ¡ gg¡S r   )	r8   r9   r:   r   ræ   r<   r=   r   r   r>   r   r   r   r?     s   úz;AreaToLineAxis1Ragged.compute_bounds_dask.<locals>.<lambda>r   r   r   rr   r@   rs   r¦   rD   r   r   r   rI      s    
,4ÿz)AreaToLineAxis1Ragged.compute_bounds_daskc                   sV   |   |¡}t||ƒ}t|||ƒ}	t|	|ƒ‰ | j‰| j‰| j‰d‡ ‡‡‡‡fdd„	}
|
S )NTc                   sz   |\}}}}|\}	}
}}|ˆ j }|ˆ j }|ˆ j }| ˆ|| d jd d… ƒ }ˆ |||||	|
|||||g|¢R Ž  d S rJ   rç   )rR   r+   rS   r,   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r^   r_   r½   r]   ©rb   rd   re   rf   rx   r   r   rg   "  s    


ýýz3AreaToLineAxis1Ragged._build_extend.<locals>.extend)T)rh   r   ri   Ú'_build_extend_area_to_line_axis1_raggedr   r   r   rk   r   rì   r   ro     s    

ÿÿz#AreaToLineAxis1Ragged._build_extendNrê   r   r   r   r   rë   à  s   
rë   c                   s(   t dd„ ƒ‰t |‡ ‡‡fdd„ƒƒ}|S )z^Specialize a plotting kernel for drawing a trapezoid with two
    sides parallel to the y-axisc                 S  sN   | dk r|dkp| |ko||k}t dt|| ƒƒ}t dt|d |ƒƒ}|||fS )z-Utility function to compute clamped y-indicesr   éÿÿÿÿr   )r6   r5   )ZystartiZystopiÚymaxiZout_of_boundsZclamped_ystartiZclamped_ystopir   r   r   Úclamp_y_indices8  s    
ÿz0_build_draw_trapezoid_y.<locals>.clamp_y_indicesc           -        sn  t |	|
||||||||ƒ
\	}	}
}}}}}}}|r4dS ˆ|||||||||	|ƒ
\}}ˆ|||||||||	|ƒ
\}}ˆ|||||||||
|ƒ
\}}ˆ|||||||||
|ƒ
\}}ˆ||||||||||ƒ
\}}|| }|dk|dk  }|| } | dk| dk  }!|| }"|"dk|"dk  }#|p|}|rêˆ|||ƒ\}$}%}&|dk pD||k}'|$sê|'rTn–|%|&krz|szˆ | ||%g|¢R Ž  np|%}(|%|&k |&|%k  })|sÀd|&|)   kr´|d krÀn n|&|)7 }&|(|&krêˆ | ||(g|¢R Ž  |(|)7 }(qÀ|pò|}*|dkrÐ|*sÐˆ|||ƒ\}$}%}&|dk p&||k}'|$sÌ|'r6n–|%|&kr\|s\ˆ | ||%g|¢R Ž  np|%}(|%|&k |&|%k  })|s¢d|&|)   kr–|d kr¢n n|&|)7 }&|(|&krÌˆ | ||(g|¢R Ž  |(|)7 }(q¢dS t|ƒd }t| ƒd } t|"ƒd }"d|  | }+d|" | },||krj|+dkrH|+s0|dkrH|+d| 8 }+||!7 }q|+d|  7 }+|,dkr†|,sn|dkr†|,d| 8 },||#7 }qT|,d|" 7 },||7 }|dk pª||k}'|'r¶qˆ|||ƒ\}$}%}&|$rÐn–|%|&krö|söˆ | ||%g|¢R Ž  np|%}(|%|&k |&|%k  })|s<d|&|)   kr0|d kr<n n|&|)7 }&|(|&krˆ | ||(g|¢R Ž  |(|)7 }(q<qdS )a	  Draw a filled trapezoid that has two sides parallel to the y-axis

        Such a trapezoid is defined by two x coordinates (x0 for the left
        edge and x1 for the right parallel edge) and four y-coordinates
        (y0 for top left vertex, y1 for bottom left vertex, y2 for the bottom
        right vertex and y3 for the top right vertex).

                                          (x1, y3)
                                      _ +
                        (x0, y0)  _--   |
                                +       |
                                |       |
                                |       |
                                +       |
                        (x0, y1)  -     |
                                    -   |
                                      - |
                                        +
                                          (x1, y2)

        In a proper trapezoid (as drawn above), y0 >= y1 and y3 >= y2 so that
        edges do not intersect. This function also handles the case where
        y1 < y0 or y2 < y3, which results in a crossing edge.

        The trapezoid is filled using a vertical scan line algorithm where the
        start and stop bins are calculated by what amounts to a pair of
        Bresenham's line algorithms, one for the top edge and one for the
        bottom edge.

        Bins in the line connecting (x0, y1) and (x1, y2) are not filled if
        the `stacked` argument is set to True. This way stacked trapezoids
        will not have any overlapping bins.

        Parameters
        ----------
        x0, x1: float
            x-coordinate indices of the start and stop edge of the trapezoid
        y0, y1, y2, y3: float
            y-coordinate indices of the four corners of the trapezoid
        xmin, xmax, ymin, ymax: float
            The minimum and maximum allowable x and y value respectively.
            The trapezoid will be clipped to these values.
        i: int
            Group index
        trapezoid_start: bool
            If True, the filled trapezoid will include the (x0, y0) to (x0, y1)
            edge. Otherwise this edge will not be included.
        stacked: bool
            If False, the filled trapezoid will include the
            (x0, y1) to (x1, y2) edge. Otherwise this edge will not
            be included.
        Nr   rî   r   r   )Ú_skip_or_clip_trapezoid_yÚabs)-ÚirU   rV   rW   rX   rY   rZ   r[   r\   Úx0Úx1Úy0Úy1Úy2Úy3Útrapezoid_startÚstackedr]   ÚskipÚclipped_startÚclipped_endZx0iZy0iÚ_Zy1iZx1iZy2iZy3iZxmaxirï   ÚdxÚixÚdy0Ziy0Údy1Ziy1Zy_oobZy_startZy_stopZx_oobr   ZiyZclippedZerror0Zerror1©rl   rð   rm   r   r   rn   N  s°    ;ÿÿÿÿÿÿÿ
*

*

*
z1_build_draw_trapezoid_y.<locals>.draw_trapezoid_y©r
   )rl   rm   rh   rn   r   r  r   ri   4  s    
 Yri   c
              	   C  s‚  d}
t | ƒs4t |ƒs4t |ƒs4t |ƒs4t |ƒs4t |ƒr8d}
||	krX||	krX||	krX||	ksx||k rš||k rš||k rš||k ršd}
d }}| ||||||
||f	S d\}}||  }|| }|| }t| | | ||ƒ\}}}|sÜd}
t|||  ||ƒ\}}}|süd}
|dk r0d}| ||  }|||  }|||  }nd}|dkrhd}| ||  } |||  }|||  }nd}| ||||||
||f	S )NFT)r   r   r   r   )r   r   )rô   rõ   rö   r÷   rø   rù   rY   rZ   r[   r\   rü   rý   rþ   Út0Út1r   r  r  Úacceptr   r   r   rñ   +  s`    ÿþýüû ÿÿÿÿ

rñ   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   s”   d}|
|  }|
| d  }||  }d}d}|| d  }| dkr@|	nt |
| d  ƒp^t || d  ƒ}ˆ | ||||||||||||||||g|¢R Ž  d S )NFr   ç        r   ©r   )ró   rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   r_   r]   rû   rô   rõ   rö   r÷   rø   rù   rú   ©rn   r   r   Úperform_extendj  s     ÿþþz8_build_extend_area_to_zero_axis0.<locals>.perform_extendc                   sF   |	j d }t|d ƒD ]*}ˆ || |||||||||	|
g|¢R Ž  qdS )ú^Aggregate filled area along a line formed by
        ``xs`` and ``ys``, filled to the y=0 liner   r   N©rL   Úrange)rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   r_   r]   Únrowsró   ©r  r   r   rb   ~  s    
ÿÿz4_build_extend_area_to_zero_axis0.<locals>.extend_cpuc                   sF   t  d¡}||	jd d k rBˆ || |||||||||	|
g|¢R Ž  d S ©Nr   r   ©r   ZgridrL   )rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   r_   r]   ró   r  r   r   rc   ‹  s    
þþz5_build_extend_area_to_zero_axis0.<locals>.extend_cuda©r
   r   Zjit©rn   rh   rb   rc   r   ©rn   r  r   rj   g  s    rj   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   s°   |
|  }|
| d  }||  }||  }|| d  }|| d  }| dkrH|	n.t |
| d  ƒpvt || d  ƒpvt || d  ƒ}d}ˆ | ||||||||||||||||g|¢R Ž  d S ©Nr   r   Tr
  )ró   rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   ru   rv   r]   rô   rõ   rö   r÷   rø   rù   rú   rû   r  r   r   r  ž  s&    ÿýþýz8_build_extend_area_to_line_axis0.<locals>.perform_extendc                   sH   |	j d }t|d ƒD ],}ˆ || |||||||||	|
|g|¢R Ž  qdS )zuAggregate filled area between the line formed by
        ``xs`` and ``ys0`` and the line formed by ``xs`` and ``ys1``r   r   Nr  )rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   ru   rv   r]   r  ró   r  r   r   rb   ³  s    
þþz4_build_extend_area_to_line_axis0.<locals>.extend_cpuc                   sH   t  d¡}||	jd d k rDˆ || |||||||||	|
|g|¢R Ž  d S r  r  )rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   ru   rv   r]   ró   r  r   r   rc   Â  s    
þþz5_build_extend_area_to_line_axis0.<locals>.extend_cudar  r  r   r  r   ry   ›  s    ry   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   s¬   || |f }|| d |f }|| |f }d}d}|| d |f }| dkrL|
n&t || d |f ƒprt || d |f ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S ©Nr   r	  r   Fr
  )ró   ÚjrU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   r_   r]   rô   rõ   rö   r÷   rø   rù   rú   rû   r  r   r   r  Õ  s"    þþýz>_build_extend_area_to_zero_axis0_multi.<locals>.perform_extendc                   sV   |	j \}}t|ƒD ]>}t|d ƒD ],}ˆ ||| |||||||||	|
g|¢R Ž  q"qdS ©r  r   Nr  )rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   r_   r]   r  Úncolsr  ró   r  r   r   rb   é  s    	
ÿÿz:_build_extend_area_to_zero_axis0_multi.<locals>.extend_cpuc                   sZ   t  d¡\}}||	jd d k rV||	jd k rVˆ ||| |||||||||	|
g|¢R Ž  d S ©Nr   r   r   r  )rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   r_   r]   ró   r  r  r   r   rc   ø  s     þþz;_build_extend_area_to_zero_axis0_multi.<locals>.extend_cudar  r  r   r  r   r    Ò  s    r    c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   sÔ   || |f }|| d |f }|| |f }|| |f }|| d |f }|| d |f }| dkr`|
n:t || d |f ƒpšt || d |f ƒpšt || d |f ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S r  r
  )ró   r  rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   ru   rv   r]   rô   rõ   rö   r÷   rø   rù   rú   rû   r  r   r   r    s&    ÿýþýz>_build_extend_area_to_line_axis0_multi.<locals>.perform_extendc                   sX   |	j \}}t|ƒD ]@}t|d ƒD ].}ˆ ||| |||||||||	|
|g|¢R Ž  q"qdS r  r  )rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   ru   rv   r]   r  r  r  ró   r  r   r   rb      s    	
ÿÿz:_build_extend_area_to_line_axis0_multi.<locals>.extend_cpuc                   s\   t  d¡\}}||	jd d k rX||	jd k rXˆ ||| |||||||||	|
|g|¢R Ž  d S r  r  )rU   rV   rW   rX   rY   rZ   r[   r\   rT   r^   ru   rv   r]   ró   r  r  r   r   rc   0  s     þþz;_build_extend_area_to_line_axis0_multi.<locals>.extend_cudar  r  r   r  r   r©     s    r©   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   s¨   |
| |f }|
| |d f }|| |f }d}d}|| |d f }|dkpnt |
| |d f ƒpnt || |d f ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S r  r
  ©ró   r  rU   rV   rW   rX   rY   rZ   r[   r\   r^   r_   r]   rô   rõ   rö   r÷   rø   rù   rú   rû   r  r   r   r  C  s$    ÿþþþzF_build_extend_area_to_zero_axis1_none_constant.<locals>.perform_extendc
                   sT   |j \}}t|ƒD ]<}t|d ƒD ]*}ˆ ||| |||||||||	g|
¢R Ž  q"qd S r   r  ©rU   rV   rW   rX   rY   rZ   r[   r\   r^   r_   r]   r  r  ró   r  r  r   r   rb   Z  s    
þþzB_build_extend_area_to_zero_axis1_none_constant.<locals>.extend_cpuc
                   sX   t  d¡\}}||jd k rT||jd d k rTˆ ||| |||||||||	g|
¢R Ž  d S r  r  ©rU   rV   rW   rX   rY   rZ   r[   r\   r^   r_   r]   ró   r  r  r   r   rc   g  s     þþzC_build_extend_area_to_zero_axis1_none_constant.<locals>.extend_cudar  r  r   r  r   r¸   @  s    
r¸   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   sÐ   |
| |f }|
| |d f }|| |f }|| |f }|| |d f }|| |d f }|dkp–t |
| |d f ƒp–t || |d f ƒp–t || |d f ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S r  r
  ©ró   r  rU   rV   rW   rX   rY   rZ   r[   r\   r^   ru   rv   r]   rô   rõ   rö   r÷   rø   rù   rú   rû   r  r   r   r  y  s(    ÿþýþýzF_build_extend_area_to_line_axis1_none_constant.<locals>.perform_extendc                   sV   |j \}}t|ƒD ]>}t|d ƒD ],}ˆ ||| |||||||||	|
g|¢R Ž  q"qdS r  r  ©rU   rV   rW   rX   rY   rZ   r[   r\   r^   ru   rv   r]   r  r  ró   r  r  r   r   rb   ’  s    
þþzB_build_extend_area_to_line_axis1_none_constant.<locals>.extend_cpuc                   sZ   t  d¡\}}||jd k rV||jd d k rVˆ ||| |||||||||	|
g|¢R Ž  d S r  r  ©rU   rV   rW   rX   rY   rZ   r[   r\   r^   ru   rv   r]   ró   r  r  r   r   rc   ¢  s     þþzC_build_extend_area_to_line_axis1_none_constant.<locals>.extend_cudar  r  r   r  r   r¾   v  s    r¾   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   sœ   |
| }|
|d  }|| |f }d}d}|| |d f }|dkpbt |
|d  ƒpbt || |d f ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S r  r
  r  r  r   r   r  µ  s$    ÿþþýzC_build_extend_area_to_zero_axis1_x_constant.<locals>.perform_extendc
                   sT   |	j \}}t|ƒD ]<}t|d ƒD ]*}ˆ ||| |||||||||	g|
¢R Ž  q"qd S r   r  r  r  r   r   rb   Ì  s    
þþz?_build_extend_area_to_zero_axis1_x_constant.<locals>.extend_cpuc
                   sX   t  d¡\}}||	jd k rT||	jd d k rTˆ ||| |||||||||	g|
¢R Ž  d S r  r  r  r  r   r   rc   Ù  s     þþz@_build_extend_area_to_zero_axis1_x_constant.<locals>.extend_cudar  r  r   r  r   rÇ   ²  s    
rÇ   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   sÄ   |
| }|
|d  }|| |f }|| |f }|| |d f }|| |d f }|dkpŠt |
|d  ƒpŠt || |d f ƒpŠt || |d f ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S r  r
  r   r  r   r   r  ë  s(    ÿþýþþzC_build_extend_area_to_line_axis1_x_constant.<locals>.perform_extendc                   sV   |	j \}}t|ƒD ]>}t|d ƒD ],}ˆ ||| |||||||||	|
g|¢R Ž  q"qd S r   r  r!  r  r   r   rb     s    
þþz?_build_extend_area_to_line_axis1_x_constant.<locals>.extend_cpuc                   sZ   t  d¡\}}||	jd k rV||	jd d k rVˆ ||| |||||||||	|
g|¢R Ž  d S r  r  r"  r  r   r   rc     s     þþz@_build_extend_area_to_line_axis1_x_constant.<locals>.extend_cudar  r  r   r  r   rË   è  s    rË   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   sœ   |
| |f }|
| |d f }|| }d}d}||d  }|dkpbt |
| |d f ƒpbt ||d  ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S r  r
  r  r  r   r   r  $  s$    ÿþþýzC_build_extend_area_to_zero_axis1_y_constant.<locals>.perform_extendc
                   sT   |j \}}t|ƒD ]<}t|d ƒD ]*}ˆ ||| |||||||||	g|
¢R Ž  q"qd S r   r  r  r  r   r   rb   <  s    
þþz?_build_extend_area_to_zero_axis1_y_constant.<locals>.extend_cpuc
                   sX   t  d¡\}}||jd k rT||jd d k rTˆ ||| |||||||||	g|
¢R Ž  d S r  r  r  r  r   r   rc   I  s     þþz@_build_extend_area_to_zero_axis1_y_constant.<locals>.extend_cudar  r  r   r  r   r×   !  s    
r×   c                   sF   t |‡ fdd„ƒƒ‰t |‡fdd„ƒƒ}tj|‡fdd„ƒƒ}||fS )Nc                   s¸   |
| |f }|
| |d f }|| }|| }||d  }||d  }|dkp~t |
| |d f ƒp~t ||d  ƒp~t ||d  ƒ}d}ˆ | ||||||||	||||||||g|¢R Ž  d S r  r
  r   r  r   r   r  [  s(    ÿþýþýzC_build_extend_area_to_line_axis1_y_constant.<locals>.perform_extendc                   sV   |j \}}t|ƒD ]>}t|d ƒD ],}ˆ ||| |||||||||	|
g|¢R Ž  q"qd S r   r  r!  r  r   r   rb   u  s    
þþz?_build_extend_area_to_line_axis1_y_constant.<locals>.extend_cpuc                   sZ   t  d¡\}}||jd k rV||jd d k rVˆ ||| |||||||||	|
g|¢R Ž  d S r  r  r"  r  r   r   rc   ƒ  s     þþz@_build_extend_area_to_line_axis1_y_constant.<locals>.extend_cudar  r  r   r  r   rÛ   X  s    rÛ   c                   s$   ‡fdd„}t |‡ fdd„ƒƒ‰|S )Nc
                   sB   |j }|j}|	j }|	j}ˆ | |||||||||||g|
¢R Ž  d S r   ©Zstart_indicesræ   )rU   rV   rW   rX   rY   rZ   r[   r\   r^   r_   r]   Úx_start_indsÚx_flatÚy_start_indsÚy_flat)Ú(perform_extend_area_to_zero_axis1_raggedr   r   rb   –  s    þýz;_build_extend_area_to_zero_axis1_ragged.<locals>.extend_cpuc                   sR  t |ƒ}t |	ƒ}t |ƒ}d}||k rN|| }||d k rF||d  n|}|
| }||d k rj|
|d  n|}t|| || ƒ}d}||d k rD|	||  }|	|| d  }|||  }d}d}||| d  }|dkpt|	|| d  ƒpt||| d  ƒ}d}ˆ || |||||||||||||||g|¢R Ž  |d7 }q„|d7 }qd S )Nr   r   r	  F©r°   r5   r   )rU   rV   rW   rX   rY   rZ   r[   r\   r$  r%  r&  r'  r]   r  Ú
x_flat_lenZ
y_flat_lenró   Ú	x_start_iÚx_stop_iZ	y_start_iZy_stop_iÚsegment_lenr  rô   rõ   rö   r÷   rø   rù   rú   rû   r  r   r   r(  ¥  sD    
ÿ
ÿþþý
zY_build_extend_area_to_zero_axis1_ragged.<locals>.perform_extend_area_to_zero_axis1_raggedr  ©rn   rh   rb   r   )rn   r(  r   ré   “  s
    /ré   c                   s$   ‡fdd„}t |‡ fdd„ƒƒ‰|S )Nc                   sR   |j }|j}|	j }|	j}|
j }|
j}ˆ | |||||||||||||g|¢R Ž  d S r   r#  )rU   rV   rW   rX   rY   rZ   r[   r\   r^   ru   rv   r]   r$  r%  Úy0_start_indsÚy0_flatÚy1_start_indsÚy1_flat)Ú(perform_extend_area_to_line_axis1_raggedr   r   rb   Ü  s    þýz;_build_extend_area_to_line_axis1_ragged.<locals>.extend_cpuc           $        s®  t |ƒ}t |	ƒ}t |ƒ}t |ƒ}d}||k rª|| }||d k rN||d  n|}|
| }||d k rr|
|d  n|}|| }||d k r–||d  n|}t|| || || ƒ}d}||d k r |	||  }|	|| d  }|||  }|||  }||| d  } ||| d  }!|dkp`t|	|| d  ƒp`t||| d  ƒp`t|||  d ƒ}"d}#ˆ || |||||||||||| |!|"|#g|¢R Ž  |d7 }q¶|d7 }q$d S )Nr   r   Tr)  )$rU   rV   rW   rX   rY   rZ   r[   r\   r$  r%  r/  r0  r1  r2  r]   r  r*  Zy0_flat_lenZy1_flat_lenró   r+  r,  Z
y0_start_iZ	y0_stop_iZ
y1_start_iZ	y1_stop_ir-  r  rô   rõ   rö   r÷   rø   rù   rú   rû   r  r   r   r3  î  sP    
þ
ÿþýþý
zY_build_extend_area_to_line_axis1_ragged.<locals>.perform_extend_area_to_line_axis1_raggedr  r.  r   )rn   r3  r   rí   Ù  s
    3rí   )4Ú
__future__r   Únumpyr8   Ztoolzr   Zdatashader.glyphs.glyphr   Zdatashader.glyphs.liner   r   Zdatashader.glyphs.pointsr   Zdatashader.utilsr   r	   r
   Znumbar   rM   ZcupyrÔ   Ztransfer_functions._cuda_utilsr   râ   r   r3   rq   rz   r¢   rª   rº   r¿   rÉ   rÌ   rÙ   rÜ   rë   ri   rñ   rj   ry   r    r©   r¸   r¾   rÇ   rË   r×   rÛ   ré   rí   r   r   r   r   Ú<module>   sX   
'NV[^joCSEGLT x
;47686<697;F