a
    Df.                    @  s0  d dl mZ d dl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mZmZ d dl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 zd dlZW n ey   dZY n0 G d
d dZdd ZG dd de
eZG dd de
eZ G dd de
eZ!G dd de!Z"G dd de!Z#G dd de
eZ$G dd deeZ%G dd deeZ&G dd de!Z'dEd!d"Z(ed#d$ Z)ed%d& Z*ed'd( Z+ed)d* Z,ed+d, Z-d-d. Z.d/d0 Z/d1d2 Z0d3d4 Z1d5d6 Z2d7d8 Z3dFd9d:d;d<Z4d=d> Z5d?d@ Z6dAdB Z7dCdD Z8dS )G    )annotationsN)memoize)two_stage_agg)
_PointLike_GeometryLike)isnullisrealngjit)cuda   )	cuda_argsc                   @  s$   e Zd ZdZdZdd Zdd ZdS )_AntiAliasedLinez Methods common to all lines. r   c                 C  s   || _ t| dr|dk| _d S )Nantialiasedr   )_line_widthhasattrr   )self
line_width r   c/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/datashader/glyphs/line.pyset_line_width    s    
z_AntiAliasedLine.set_line_widthc              	   C  s   |  ||||| j||S N)_internal_build_extendr   )r   x_mappery_mapperinfoappendantialias_stage_2antialias_stage_2_funcsr   r   r   _build_extend%   s    z_AntiAliasedLine._build_extendN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s   r   c                 C  s@   |dk}t | ||}t|\}	}
|
s(d }t|||||	}||fS )Nr   )_build_map_onto_pixel_for_liner   _build_draw_segment)r   r   r   r   r   r   expand_aggs_and_cols	antialiasmap_onto_pixel	overwriteuse_2_stage_aggdraw_segmentr   r   r   _line_internal_build_extend,   s    
r+   c                   @  s   e Zd ZdZedd ZdS )	LineAxis0zA line, with vertices defined by ``x`` and ``y``.

    Parameters
    ----------
    x, y : str
        Column names for the x and y coordinates of each vertex.
    c                   s\    |}t|||| ||\}	}t|	||\jjd fdd	}
|
S )NTc                   s   |\}}}}|\}	}
}}| || d j d d  }trlt|tjrl|}|}t|j  }n0|jd d f  }|jd d f  }}||||||	|
||||| g|R   d S Nr   r   )shapecudf
isinstance	DataFrameto_cupy_arrayr   locto_numpyaggsdfvtbounds
plot_startsxtxsytyxminxmaxyminymaxaggs_and_colsxsys	do_extendr   
extend_cpuextend_cudar   r   x_namey_namer   r   extendS   s     z0LineAxis0._internal_build_extend.<locals>.extend)T)r%   r+   _build_extend_line_axis0xyr   r   r   r   r   r   r   r   r%   r*   rL   r   rG   r   r   C   s    
z LineAxis0._internal_build_extendN)r   r    r!   r"   r   r   r   r   r   r   r,   ;   s   r,   c                   @  s`   e Zd 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 )LineAxis0Multi
    c                   sz   t  fdd| jD s"tdn t  fdd| jD sBtdt| jt| jkrvtdt| j dt| j d S )Nc                   s   g | ]}t  jt| qS r   r   measurestr.0Zxcol	in_dshaper   r   
<listcomp>o       z+LineAxis0Multi.validate.<locals>.<listcomp>x columns must be realc                   s   g | ]}t  jt| qS r   rS   rW   ZycolrX   r   r   rZ   q   r[   y columns must be real)x and y coordinate lengths do not match:  != )allrN   
ValueErrorrO   lenr   rY   r   rX   r   validaten   s    
zLineAxis0Multi.validatec                 C  s   dS NrN   r   r   r   r   r   x_labelx   s    zLineAxis0Multi.x_labelc                 C  s   dS NrO   r   rg   r   r   r   y_label|   s    zLineAxis0Multi.y_labelc                 C  s   | j | j S r   rN   rO   rg   r   r   r   required_columns   s    zLineAxis0Multi.required_columnsc                   s8    fddj D }t| \}}t|t|fS )Nc                   s   g | ]}  | qS r   _compute_bounds)rW   rN   r7   r   r   r   rZ      s   z3LineAxis0Multi.compute_x_bounds.<locals>.<listcomp>)rN   zipmaybe_expand_boundsminmaxr   r7   bounds_listminsmaxesr   ro   r   compute_x_bounds   s
    zLineAxis0Multi.compute_x_boundsc                   s8    fddj D }t| \}}t|t|fS )Nc                   s   g | ]}  | qS r   rm   )rW   rO   ro   r   r   rZ      s   z3LineAxis0Multi.compute_y_bounds.<locals>.<listcomp>)rO   rp   rq   rr   rs   rt   r   ro   r   compute_y_bounds   s
    zLineAxis0Multi.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} | |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   npnanminvaluesitemrW   cr7   r   r   rZ      r[   zHLineAxis0Multi.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  | j qS r   r{   nanmaxr}   r~   r   r   r   r   rZ      r[   c                   s    g | ]}t  | j qS r   rz   r   r   r   r   rZ      r[   c                   s    g | ]}t  | j qS r   r   r   r   r   r   rZ      r[   r{   arrayr|   rN   r   rO   r   rg   r   r   <lambda>   s
   z4LineAxis0Multi.compute_bounds_dask.<locals>.<lambda>r      r      map_partitionscomputer{   r|   r   rq   r   ddfr	x_extents	y_extentsr   rg   r   compute_bounds_dask   s    ,,z"LineAxis0Multi.compute_bounds_daskc                   s\    |}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 r-   	r.   r/   r0   r1   r2   r   r3   listr4   r5   r   rH   rI   r   r   x_namesy_namesr   r   rL      s     z5LineAxis0Multi._internal_build_extend.<locals>.extend)T)r%   r+   _build_extend_line_axis0_multirN   rO   rP   r   r   r   r      s    
z%LineAxis0Multi._internal_build_extendN)r   r    r!   r"   re   propertyrh   rj   rl   rx   ry   r   r   r   r   r   r   r   rQ   j   s   



rQ   c                   @  s`   e Zd 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 )
LinesAxis1zA collection of lines (on line per row) with vertices defined
    by the lists of columns in ``x`` and ``y``

    Parameters
    ----------
    x, y : list
        Lists of column names for the x and y coordinates
    c                   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rtdt| jt| jkrtdt| j dt| j d S )Nc                   s   g | ]}t  jt| qS r   rS   rV   rX   r   r   rZ      s   z'LinesAxis1.validate.<locals>.<listcomp>r\   c                   s   g | ]}t  jt| qS r   rS   r]   rX   r   r   rZ      s   r^   c                 3  s   | ]} j t| V  qd S r   rT   rU   rV   rX   r   r   	<genexpr>   s   z&LinesAxis1.validate.<locals>.<genexpr>r   &x columns must have the same data typec                 3  s   | ]} j t| V  qd S r   r   r]   rX   r   r   r      s   &y columns must have the same data typer_   r`   )ra   rN   rb   rO   setrc   )r   rY   unique_x_measuresunique_y_measuresr   rX   r   re      s,    
zLinesAxis1.validatec                 C  s   | j | j S r   rk   rg   r   r   r   rl      s    zLinesAxis1.required_columnsc                 C  s   dS rf   r   rg   r   r   r   rh      s    zLinesAxis1.x_labelc                 C  s   dS ri   r   rg   r   r   r   rj      s    zLinesAxis1.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   )rW   Zxlabelr   r   r   r      r[   z.LinesAxis1.compute_x_bounds.<locals>.<genexpr>c                   s   g | ]}  |qS r   rm   rV   rg   r   r   rZ      r[   z/LinesAxis1.compute_x_bounds.<locals>.<listcomp>)tuplerN   rp   rq   rr   rs   )r   r7   rD   ru   rv   rw   r   ro   r   rx      s    zLinesAxis1.compute_x_boundsc                   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   )rW   Zylabelr   r   r   r      r[   z.LinesAxis1.compute_y_bounds.<locals>.<genexpr>c                   s   g | ]}  |qS r   rm   r]   rg   r   r   rZ      r[   z/LinesAxis1.compute_y_bounds.<locals>.<listcomp>)r   rO   rp   rq   rr   rs   )r   r7   rE   ru   rv   rw   r   ro   r   ry      s    zLinesAxis1.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} | |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   rz   r   r   r   r   rZ     r[   zDLinesAxis1.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  | j qS r   r   r   r   r   r   rZ     r[   c                   s    g | ]}t  | j qS r   rz   r   r   r   r   rZ     r[   c                   s    g | ]}t  | j qS r   r   r   r   r   r   rZ     r[   r   r   rg   r   r   r     s
   z0LinesAxis1.compute_bounds_dask.<locals>.<lambda>r   r   r   r   r   r   r   rg   r   r     s    ,,zLinesAxis1.compute_bounds_daskc                   s\    |}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 r-   r   r5   r   r   r   rL      s    z1LinesAxis1._internal_build_extend.<locals>.extend)T)r%   r+   &_build_extend_line_axis1_none_constantrN   rO   rP   r   r   r   r     s    
z!LinesAxis1._internal_build_extendN)r   r    r!   r"   re   rl   r   rh   rj   rx   ry   r   r   r   r   r   r   r   r      s   	


r   c                   @  s@   e Zd ZdZdd Zdd Zdd Zedd	 Zed
d Z	dS )LinesAxis1XConstantrR   c                   s   t  fdd| jD s tdt fdd| jD }t|dkrLtdt| jt| jkrtdt| j d	t| j d S )
Nc                   s   g | ]}t  jt| qS r   rS   r]   rX   r   r   rZ   9  r[   z0LinesAxis1XConstant.validate.<locals>.<listcomp>r^   c                 3  s   | ]} j t| V  qd S r   r   r]   rX   r   r   r   <  s   z/LinesAxis1XConstant.validate.<locals>.<genexpr>r   r   r_   r`   )ra   rO   rb   r   rc   rN   )r   rY   r   r   rX   r   re   8  s    zLinesAxis1XConstant.validatec                 C  s   | j S r   )rO   rg   r   r   r   rl   E  s    z$LinesAxis1XConstant.required_columnsc                 G  s&   t | j}t | j}| ||fS r   )r{   r|   rN   r   rq   )r   argsZx_minZx_maxr   r   r   rx   H  s    z$LinesAxis1XConstant.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   rz   r   r   r   r   rZ   Q  r[   zMLinesAxis1XConstant.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  | j qS r   r   r   r   r   r   rZ   R  r[   )r{   r   r|   rO   r   r   rg   r   r   r   P  s   z9LinesAxis1XConstant.compute_bounds_dask.<locals>.<lambda>r   r   )r   r   r{   r|   r   rx   rq   )r   r   r   r   r   rg   r   r   M  s
    ,z'LinesAxis1XConstant.compute_bounds_daskc                   s\    |}t|||| ||\}	}t|	||\jjd fdd	}
|
S )NTc                   s   |\}}}}|\}	}
}}| || d j d d  }trjt|tjrjt}|}t|j  }n"}|jd d t	f 
 }}||||||	|
|||| g|R   d S r-   )r.   r/   r0   r1   cpasarrayr2   r   r3   r   r4   r5   r   rH   rI   r   r   Zx_valuesr   r   r   rL   j  s    
z:LinesAxis1XConstant._internal_build_extend.<locals>.extend)T)r%   r+   #_build_extend_line_axis1_x_constantrN   rO   rP   r   r   r   r   Z  s    
z*LinesAxis1XConstant._internal_build_extendN)
r   r    r!   r"   re   rl   rx   r   r   r   r   r   r   r   r   5  s   
r   c                   @  s@   e Zd ZdZdd Zdd Zdd Zedd	 Zed
d Z	dS )LinesAxis1YConstantrR   c                   s   t  fdd| jD s tdt fdd| jD }t|dkrLtdt| jt| jkrtdt| j d	t| j d S )
Nc                   s   g | ]}t  jt| qS r   rS   rV   rX   r   r   rZ     r[   z0LinesAxis1YConstant.validate.<locals>.<listcomp>r\   c                 3  s   | ]} j t| V  qd S r   r   rV   rX   r   r   r     s   z/LinesAxis1YConstant.validate.<locals>.<genexpr>r   r   r_   r`   )ra   rN   rb   r   rc   rO   )r   rY   r   r   rX   r   re     s    zLinesAxis1YConstant.validatec                 C  s   | j S r   )rN   rg   r   r   r   rl     s    z$LinesAxis1YConstant.required_columnsc                 G  s&   t | j}t | j}| ||fS r   )r{   r|   rO   r   rq   )r   r   Zy_minZy_maxr   r   r   ry     s    z$LinesAxis1YConstant.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   rz   r   r   r   r   rZ     r[   zMLinesAxis1YConstant.compute_bounds_dask.<locals>.<lambda>.<locals>.<listcomp>c                   s    g | ]}t  | j qS r   r   r   r   r   r   rZ     r[   )r{   r   r|   rN   r   r   rg   r   r   r     s   z9LinesAxis1YConstant.compute_bounds_dask.<locals>.<lambda>r   r   )r   r   r{   r|   r   rq   ry   )r   r   r   r   r   rg   r   r     s
    ,z'LinesAxis1YConstant.compute_bounds_daskc                   s\    |}t|||| ||\}	}t|	||\jjd fdd	}
|
S )NTc                   s   |\}}}}|\}	}
}}| || d j d d  }trjt|tjrj|}t}t|j  }n"|jd d t	f 
 }}}||||||	|
|||| g|R   d S r-   )r.   r/   r0   r1   r2   r   r   r   r3   r   r4   r5   r   rH   rI   r   r   r   Zy_valuesr   r   rL     s    
z:LinesAxis1YConstant._internal_build_extend.<locals>.extend)T)r%   r+   #_build_extend_line_axis1_y_constantrN   rO   rP   r   r   r   r     s    
z*LinesAxis1YConstant._internal_build_extendN)
r   r    r!   r"   re   rl   ry   r   r   r   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 )LinesAxis1Raggedc                 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   )RaggedDtypezx must be a RaggedArrayzy must be a RaggedArray)	Zdatashader.datatypesr   ImportErrortyper0   rU   rN   rb   rO   )r   rY   r   r   r   r   re     s    
zLinesAxis1Ragged.validatec                 C  s   | j f| jf S r   rk   rg   r   r   r   rl     s    z!LinesAxis1Ragged.required_columnsc                 C  s   |  || j jj}| |S r   )rn   rN   r   
flat_arrayrq   r   r7   r9   r   r   r   rx     s    z!LinesAxis1Ragged.compute_x_boundsc                 C  s   |  || j jj}| |S r   )rn   rO   r   r   rq   r   r   r   r   ry     s    z!LinesAxis1Ragged.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} | |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   )r{   r   r|   rN   r   r~   r   rO   r   rg   r   r   r     s
   z6LinesAxis1Ragged.compute_bounds_dask.<locals>.<lambda>r   r   r   r   r   r   r   rg   r   r     s    ,,z$LinesAxis1Ragged.compute_bounds_daskc                   sT   |  |}t|||| ||\}	}t|	||| j| jd fdd	}
|
S )NTc                   sp   |\}}}}|\}	}
}}| j }| j }| || d jd d  }|||||	|
|||| g|R   d S r-   )r   r.   )r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   rC   r   rH   r   rJ   rK   r   r   rL     s    

z7LinesAxis1Ragged._internal_build_extend.<locals>.extend)T)r%   r+   _build_extend_line_axis1_raggedrN   rO   rP   r   r   r   r     s    
z'LinesAxis1Ragged._internal_build_extendN)
r   r    r!   re   rl   rx   ry   r   r   r   r   r   r   r   r     s   
r   c                   @  s$   e Zd Zedd Zedd ZdS )LineAxis1Geometryc                 C  s*   ddl m}m}m}m}m} |||||fS )Nr   )	LineDtypeMultiLineDtype	RingDtypePolygonDtypeMultiPolygonDtype)spatialpandas.geometryr   r   r   r   r   )r   r   r   r   r   r   r   r   r   geom_dtypes  s    zLineAxis1Geometry.geom_dtypesc                   sf   ddl mm m | |}t||||||\}	}t|	||| jd fdd	}
|
S )Nr   )PolygonArrayMultiPolygonArray	RingArrayTc                   s   |\}}}}|\}	}
}}| || d j d d  }| j}t| frX|j}d}nt|rhd}nd}|||||	|
||||g|R   d S )Nr   r   TF)r.   r   r0   boundary)r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   
geom_arrayclosed_ringsr   r   r   r   geometry_namer   perform_extend_cpur   r   rL   +  s     

z8LineAxis1Geometry._internal_build_extend.<locals>.extend)T)r   r   r   r   r%   r+   !_build_extend_line_axis1_geometrygeometryrP   r   r   r   r     s    
z(LineAxis1Geometry._internal_build_extendNr   r    r!   r   r   r   r   r   r   r   r   r     s   
r   c                   @  s$   e Zd Zedd Zedd ZdS )LineAxis1GeoPandasc                 C  s   ddl m} |fS )Nr   )GeometryDtype)Zgeopandas.arrayr   )r   r   r   r   r   r   G  s    zLineAxis1GeoPandas.geom_dtypesc                   sL   |  |}t|||| ||\}	}t|	||| jd fdd	}
|
S )NTc                   sd   |\}}}}|\}	}
}}| || d j d d  }| j}|||||	|
||| g
|R   d S r-   )r.   r   )r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r   r   r   r   r   r   r   rL   [  s    
z9LineAxis1GeoPandas._internal_build_extend.<locals>.extend)T)r%   r+   "_build_extend_line_axis1_geopandasr   rP   r   r   r   r   L  s    
z)LineAxis1GeoPandas._internal_build_extendNr   r   r   r   r   r   E  s   
r   c                      sV   e Zd Zdd fddZdd Zdd Zd	d
 Zdd Zdd Ze	dd Z
  ZS )LinesXarrayCommonXint)x_dim_indexc                   s   t  || || _d S r   )super__init__r   )r   rN   rO   r   	__class__r   r   r   j  s    zLinesXarrayCommonX.__init__c                 C  s   t t| | jfS r   )hashr   r   rg   r   r   r   __hash__n  s    zLinesXarrayCommonX.__hash__c                 C  s   |  || j }| |S r   )rn   rN   rq   r   Zdatasetr9   r   r   r   rx   r  s    z#LinesXarrayCommonX.compute_x_boundsc                 C  s   |  || j }| |S r   )rn   rO   rq   r   r   r   r   ry   v  s    z#LinesXarrayCommonX.compute_y_boundsc                 C  s   |  || |fS r   )rx   ry   )r   Zxr_dsr   r   r   r   z  s    z&LinesXarrayCommonX.compute_bounds_daskc                 C  s<   t |jt| j stdt |jt| j s8tdd S )Nzx column must be realzy column must be real)r   rT   rU   rN   rb   rO   rd   r   r   r   re   }  s    zLinesXarrayCommonX.validatec                   sh   |  |}t|||| ||\}	}| jdkt|	||\| j| jd fdd	}
|
S )Nr   Tc                   s
  |\}}}}|\}	}
}}| || d j d d  }trpt|tjrpt| }t| }t|j  }nrtrt| jtjrt| }| j}r|j d d d n|j }t| }n| 	 }| 	 }}||||||	|
|||| g|R   d S )Nr   r   )
r.   r/   r0   r1   r   r   r   dataZndarrayr4   )r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   r.   r   rH   rI   r   	swap_dimsrJ   rK   r   r   rL     s(    
z9LinesXarrayCommonX._internal_build_extend.<locals>.extend)T)r%   r+   r   r   rN   rO   rP   r   r   r   r     s    

z)LinesXarrayCommonX._internal_build_extend)r   r    r!   r   r   rx   ry   r   re   r   r   __classcell__r   r   r   r   r   i  s   r   Fc                   s4   t  fdd}t  fdd}|r,|S |S d S )Nc
                   sx   t  ||  | }
t |	| | }t ||  | }t|| | }|
|kr`|
d n|
||krr|d n|fS )a  Map points onto pixel grid.

        Points falling on upper bound are mapped into previous bin.

        If the line has been clipped, x and y will have been
        computed to lie on the bounds; we compare point and bounds
        in integer space to avoid fp error. In contrast, with
        auto-ranging, a point on the bounds will be the same
        floating point number as the bound, so comparison in fp
        representation of continuous space or in integer space
        doesn't change anything.
        r   )r   round)r;   r<   r=   r>   r?   r@   rA   rB   rN   rO   xxyyZxxmaxZyymaxr   r   r   r   map_onto_pixel_snap  s    z;_build_map_onto_pixel_for_line.<locals>.map_onto_pixel_snapc
                   s0    ||  | d }
|	| | d }|
|fS )N      ?r   )r;   r<   r=   r>   r?   r@   rA   rB   rN   rO   r   r   r   r   r   map_onto_pixel_no_snap  s    z>_build_map_onto_pixel_for_line.<locals>.map_onto_pixel_no_snapr	   )r   r   Zwant_antialiasr   r   r   r   r   r#     s     r#   c	                 C  s\  || k r|| k rd}n@||kr,||kr,d}n*||k rB||k rBd}n||krV||krVd}d\}	}
|| }t | ||  |	|
\}	}
}|sd}t ||| |	|
\}	}
}|sd}|| }t | || |	|
\}	}
}|sd}t ||| |	|
\}	}
}|sd}|
dk rd}||
|  }||
|  }nd}|	dkrFd}||	|  }||	|  }nd}|||||||fS )z An implementation of the Liang-Barsky line clipping algorithm.

    https://en.wikipedia.org/wiki/Liang%E2%80%93Barsky_algorithm

    T)r   r   r   Fr   )_clipt)r?   r@   rA   rB   x0x1y0y1skipt0t1Zdx1acceptZdy1clipped_endclipped_startr   r   r   _liang_barsky  sD    

r   c                 C  s   d}| dk r8|dk r8||  }||kr*d}qx||krx|}n@| dkrl|| k rl||  }||k r^d}qx||k rx|}n|dk rxd}|||fS )NTr   Fr   )pqr   r   r   r   r   r   r   r     s     r   c                 C  s   t |t| |S r   )rs   rr   )rN   lowhighr   r   r   _clamp#  s    r   c                 C  s   t ||  ||   dd}|S )N              ?)r   )Zedge0Zedge1rN   tr   r   r   _linearstep)  s    r   c                 C  s,   ||kr|S | | ||  }||||   S r   r   )rO   Zcx0Zcy0Zcx1Zcy1fracr   r   r   _x_intercept/  s    r   c                 C  s   t | dd }|S )zQSpecialize antialiased line drawing algorithm for a given append/axis combinationc           4      W  s  ||kr||krdS t || t || k }|rN|| }}|| }}|
|	 }	}
d}| dk rf|| 9 }d} d}d| |  }||k p||ko||k }t|| }t|| }t|d |d  }|| }|| }|}| }|r||||   |d< ||| |   |d< ||| |   |d< ||||   |d< ||||   |d< ||| |   |d	< ||| |   |d
< ||||   |d< n||||   |d< ||| |   |d< ||| |   |d< ||||   |d< ||||   |d< ||| |   |d	< ||| |   |d
< ||||   |d< |d }|d }|rN|| }}|rh||krbdnd}n||krvdnd}|s|s||	 }||
 }t|d |d  }|dkr|| }|| }|} | }!nd}tt|d|  d|}"tt|d|d d   d|}#|}$|$d d }%|}&|&d d }'t|"|#d D ]}(|$|krr|(|d|%  krr|%}$|$d d }%|&|kr|(|d|'  kr|'}&|&d d }'ttt|(||$ |d|$  ||% |d|%  d|})ttt|(||& |d|&  ||' |d|'  d|}*t|)|*d D ]}+|+| | |(| |  },d}-|,dk r|sn|sn|+| | |(| |  dkrt|+| d |(| d  }.nqn|,|kr|s|rt|+| d |(| d  }.nqnt |+| | |(| |  }.|sP|sP| |+| | |(| |    kr&dkrPn n&t |+| |  |(| |!  |krPd}-dt	d| |  ||. }/|/|9 }/d}0|-rt |+| |  |(| |!  }1dt	d| |  ||1 }0|0|9 }0|/|0krd}/|/dkr|r|(|+fn|+|(f\}2}3|||2|3|/|0g|R   qq@dS )aD  Draw an antialiased line segment.

        If overwrite=True can overwrite each pixel multiple times because
        using max for the overwriting.  If False can only write each pixel
        once per segment and its previous segment.
        Argument xm, ym are only valid if overwrite and segment_start are False.
        Nr   r   r   r   r   r               r   TF)
absfloatmathsqrtr   ceilfloorranger   r   )4r   r(   ir   r   r   r   segment_startsegment_endxmymr   nxnybufferrC   Zflip_xyZscaleZaaZ	halfwidthZ
flip_orderZalongxZalongylengthZrightxZrightyr@   rB   ZlowindexZprev_alongxZprev_alongyZprev_lengthZprev_rightxZprev_rightyZystartZyendZllZluZrlrurO   ZxleftZxrightrN   ZalongZprev_correctionZdistancevalueZ
prev_valueZprev_distancer   r   r   r   r   _full_antialias<  s    




"""
* 
 


z._build_full_antialias.<locals>._full_antialiasr   )r%   r  r   r   r   _build_full_antialias:  s
     r  c                 C  s   t | dd }|S )zASpecialize a bresenham kernel for a given append/axis combinationc                 W  sh  ||
 }|dk|dk  }t |d }|| }|dk|dk  }t |d }|sl||B sl|| |
|g|R   dS |	r|| |
|g|R   ||krd| | }|
|kr|dkr|s|dkr|d| 8 }||7 }|d| 7 }|
|7 }
|| |
|g|R   qnpd| | }||krd|dkr8|s$|dkr8|d| 8 }|
|7 }
|d| 7 }||7 }|| |
|g|R   q dS )zDraw a line segment using Bresenham's algorithm
        This method plots a line segment with integer coordinates onto a pixel
        grid.
        r   r   N)r   )r  r;   r<   r=   r>   r?   r@   rA   rB   r  r   r   r   r   clippedr   rC   ZdxixZdyZiyerrorr   r   r   
_bresenham  s8    
z$_build_bresenham.<locals>._bresenhamr   )r%   r  r   r   r   _build_bresenham  s    )r  c                   sD   dkrd t |nt| dt| fdd}|S )zESpecialize a line plotting kernel for a given append/axis combinationr   Nc           #        sV  d}t |s$t |s$t |s$t |r(d}t|||||||||	\}}}}}}}|sR|pZ|}|	pb|}	||||||||||
\}}||||||||||
\}}dkr$|	rd }} n||||||||||
\}} t|| | }!t|| | }"| |||||	|
|| |!|"|g|R   n. | |||||||||	|||||g|R   d S )NFTr   )r   r   r   )#r  r;   r<   r=   r>   r?   r@   rA   rB   r  r  r   r   r   r   r  r	  r  rC   r   Zx0_1Zx1_1Zy0_1Zy1_1r   r   r  Zx0_2Zy0_2Zx1_2Zy1_2Zxm_2Zym_2r
  r  r  r  r   r   r'   r(   r   r   r*     sD     




z)_build_draw_segment.<locals>.draw_segment)r  r  r	   )r   r'   r%   r   r(   r*   r   r  r   r$   	  s    
4r$   c                   sP   |d ut | fddt |fdd}tj|fdd}||fS )Nc                   s   |
|  }||  }|
| d  }|| d  }| dkr4|	nt |
| d  pRt || d  }| t|
d kpt |
| d  pt || d  }|srd}d}n|
| d  }|| d  } | |||||||||||||||||g|R   d S Nr   r   r   r   r   rc   )r  r;   r<   r=   r>   r?   r@   rA   rB   r:   rD   rE   r  rC   r   r   r   r   r  r  r  r	  r*   r)   r   r   perform_extend_lineN  s&    0z5_build_extend_line_axis0.<locals>.perform_extend_linec                   sb   |du}|rt dnd}|jd }t|d D ],} || ||||||||
||	|g|R   q0dS )2Aggregate along a line formed by ``xs`` and ``ys``N   r   r   r{   emptyr.   r  )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r:   r   rC   r&   r  nrowsr  r  r   r   rH   f  s    
z,_build_extend_line_axis0.<locals>.extend_cpuc                   sh   |d u}|rt jdtjnd }t d}||jd d k rd || ||||||||
||	|g|R   d S Nr  r   r   r
   localr   nb_typesfloat64Zgridr.   )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r:   r   rC   r&   r  r  r!  r   r   rI   r  s    
z-_build_extend_line_axis0.<locals>.extend_cudar	   r
   Zjit)r*   r%   r   rH   rI   r   )r*   r  r)   r   rM   K  s    
	rM   c                   s   |d ur|\ |d ut |fddt |fdd}fdd}t | fddtj|fd	d
}r||fS ||fS d S )Nc                   s  || |f }|| |f }|| d |f }|| d |f }| dkrD|
n&t || d |f pjt || d |f }| t|d kpt || d |f pt || d |f }|srd}d}n || d |f }|| d |f } | ||||||||	|||||||||g|R   d S r  r  )r  jr;   r<   r=   r>   r?   r@   rA   rB   r:   rD   rE   r  rC   r   r   r   r   r  r  r  r	  r  r   r   r    s&    &8z;_build_extend_line_axis0_multi.<locals>.perform_extend_linec                   sr   |du}|rt dnd}|j\}}t|D ]@}t|d D ].} ||| ||||||||
||	|g|R   q<q,dS )r  Nr  r   r  )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r:   r   rC   r&   r  r   ncolsr(  r  r!  r   r   rH     s    
z2_build_extend_line_axis0_multi.<locals>.extend_cpuc                   sR   t |d }tdd |d| D } | |||||||||	|
||g|R   dS )r  r   c                 s  s   | ]}||  fV  qd S r   copyrW   Zaggr   r   r   r     r[   zT_build_extend_line_axis0_multi.<locals>.extend_cpu_antialias_2agg.<locals>.<genexpr>Nrc   r   )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r:   r   rC   n_aggsaggs_and_accumscpu_antialias_2agg_implr   r   extend_cpu_antialias_2agg  s    zA_build_extend_line_axis0_multi.<locals>.extend_cpu_antialias_2aggc                   s   |d u}|rt dnd }|j\}}t|D ]p}t|d D ].}||| ||||||||
||	|g|R   q<|dkrz d S  ||dk ||d k r,| q,| d S r"  r  )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r:   r   r/  rC   r&   r  r   r)  r(  r  aa_stage_2_accumulateaa_stage_2_clearaa_stage_2_copy_backr  r   r   r1    s     


z?_build_extend_line_axis0_multi.<locals>.cpu_antialias_2agg_implc                   s|   |d u}|rt jdtjnd }t d\}}||jd d k rx||jd k rx ||| ||||||||
||	|g|R   d S Nr  r   r   r   r#  )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r:   r   rC   r&   r  r  r(  r!  r   r   rI     s     z3_build_extend_line_axis0_multi.<locals>.extend_cudar'  r*   r%   r   rH   r2  rI   r   r4  r5  r6  r1  r*   r  r)   r   r     s&    
	r   c                   s   |d ur|\ |d ut |fddt |fdd}fdd}t | fddtj|fd	d
}r||fS ||fS d S )Nc                   s
  |
| |f }|| |f }|
| |d f }|| |d f }|dkpft |
| |d f pft || |d f }||
jd d kpt |
| |d f pt || |d f }|srd}d}n |
| |d f }|| |d f } | ||||||||	|||||||||g|R   d S r  )r   r.   r  r(  r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r  rC   r   r   r   r   r  r  r  r	  r  r   r   r    s$    .:zC_build_extend_line_axis1_none_constant.<locals>.perform_extend_linec                   sv   |
d u}|rt dnd }|jd }t|jd D ]>}t|d D ],} ||| |||||||||	|g|R   qBq2d S r"  r  r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   rC   r&   r  r)  r  r(  r!  r   r   rH     s    
z:_build_extend_line_axis1_none_constant.<locals>.extend_cpuc                   sP   t |
d }tdd |d | D } | |||||||||	|
|g|R   d S )Nr   c                 s  s   | ]}||  fV  qd S r   r*  r,  r   r   r   r     r[   z\_build_extend_line_axis1_none_constant.<locals>.extend_cpu_antialias_2agg.<locals>.<genexpr>r-  r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   rC   r.  r/  r0  r   r   r2    s    zI_build_extend_line_axis1_none_constant.<locals>.extend_cpu_antialias_2aggc                   s   |
d u}|rt dnd }|jd }t|jd D ]z}t|d D ],}||| |||||||||	|g|R   qB|jd dkr d S  ||dk ||jd d k r2| q2| d S r"  r  r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   r/  rC   r&   r  r)  r  r(  r3  r   r   r1    s     


zG_build_extend_line_axis1_none_constant.<locals>.cpu_antialias_2agg_implc                   sz   |
d u}|rt jdtjnd }t d\}}||jd k rv||jd d k rv ||| |||||||||	|g|R   d S r7  r#  r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   rC   r&   r  r  r(  r!  r   r   rI   )  s     z;_build_extend_line_axis1_none_constant.<locals>.extend_cudar'  r8  r   r9  r   r     s&    
r   bool)r   c                   s   |d ur|\ |d ut |fddt |fdd}fdd}t | fddtj|fd	d
}r||fS ||fS d S )Nc                   s  |
| }|
|d  }r||| f }||d | f }|dkp^t |
|d  p^t ||d | f }|t|
d kpt |
|d  pt ||d | f }n|| |f }|| |d f }|dkpt |
|d  pt || |d f }|t|
d kpt |
|d  pt || |d f }|s"r,d}d}n2|
|d  }rN||d | f n|| |d f } | ||||||||	|||||||||g|R   d S r  r  )r  r(  r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r  rC   r   r   r   r   r  r  r  r	  )r*   r   r)   r   r   r  B  s,    ,6,8&z@_build_extend_line_axis1_x_constant.<locals>.perform_extend_linec                   s   |
d u}|rt dnd }r$|	jn|	jd d d \}}t|D ]>}t|d D ],} ||| |||||||||	|g|R   qPq@d S )Nr  r   r   r  )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   rC   r&   r  r)  r   r  r(  r  r   r   r   rH   _  s    z7_build_extend_line_axis1_x_constant.<locals>.extend_cpuc                   sP   t |
d }tdd |d | D } | |||||||||	|
|g|R   d S )Nr   c                 s  s   | ]}||  fV  qd S r   r*  r,  r   r   r   r   o  r[   zY_build_extend_line_axis1_x_constant.<locals>.extend_cpu_antialias_2agg.<locals>.<genexpr>r-  r<  r0  r   r   r2  l  s    zF_build_extend_line_axis1_x_constant.<locals>.extend_cpu_antialias_2aggc                   s   |
d u}|rt dnd }|	jd }t|	jd D ]z}t|d D ],}||| |||||||||	|g|R   qB|	jd dkr d S  ||dk ||	jd d k r2| q2| d S r"  r  r=  r3  r   r   r1  s  s"    


zD_build_extend_line_axis1_x_constant.<locals>.cpu_antialias_2agg_implc                   s   |
d u}|rt jdtjnd }t d\}}r8|	jn|	jd d d \}}||k r||d k r ||| |||||||||	|g|R   d S )Nr  r   r   r   r#  )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   rC   r&   r  r  r(  r)  r   r@  r   r   rI     s    z8_build_extend_line_axis1_x_constant.<locals>.extend_cudar'  )r*   r%   r   r   rH   r2  rI   r   )r4  r5  r6  r1  r*   r  r   r)   r   r   <  s&    
r   c                   s   |d ur|\ |d ut |fddt |fdd}fdd}t | fddtj|fd	d
}r||fS ||fS d S )Nc                   s   |
| |f }|| }|
| |d f }||d  }|dkpZt |
| |d f pZt ||d  }|t|d kpt |
| |d f pt ||d  }|srd}d}n|
| |d f }||d  } | ||||||||	|||||||||g|R   d S r  r  r:  r  r   r   r    s$    *4z@_build_extend_line_axis1_y_constant.<locals>.perform_extend_linec                   sv   |
d u}|rt dnd }|jd }t|jd D ]>}t|d D ],} ||| |||||||||	|g|R   qBq2d S r"  r  r;  r!  r   r   rH     s    
z7_build_extend_line_axis1_y_constant.<locals>.extend_cpuc                   sP   t |
d }tdd |d | D } | |||||||||	|
|g|R   d S )Nr   c                 s  s   | ]}||  fV  qd S r   r*  r,  r   r   r   r     r[   zY_build_extend_line_axis1_y_constant.<locals>.extend_cpu_antialias_2agg.<locals>.<genexpr>r-  r<  r0  r   r   r2    s    zF_build_extend_line_axis1_y_constant.<locals>.extend_cpu_antialias_2aggc                   s   |
d u}|rt dnd }|jd }t|jd D ]z}t|d D ],}||| |||||||||	|g|R   qB|jd dkr d S  ||dk ||jd d k r2| q2| d S r"  r  r=  r3  r   r   r1    s"    


zD_build_extend_line_axis1_y_constant.<locals>.cpu_antialias_2agg_implc                   sz   |
d u}|rt jdtjnd }t d\}}||jd k rv||jd d k rv ||| |||||||||	|g|R   d S r7  r#  r>  r!  r   r   rI     s     z8_build_extend_line_axis1_y_constant.<locals>.extend_cudar'  r8  r   r9  r   r     s&    
r   c                   sr   |d ur|\ |d ufdd}t |fddfdd}t | fddrj|S |S d S )	Nc                   sD   |j }|j}|	j }|	j} | ||||||||||||
g|R   d S r   )start_indicesr   )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   rC   	x_start_ix_flat	y_start_iy_flatextend_cpu_numbar   r   rH     s    
z3_build_extend_line_axis1_ragged.<locals>.extend_cpuc           "        s  |d u}|rt dnd }t|}t|	}t|}t|D ]~}|| }||d k r`||d  n|}|
| }||d k r|
|d  n|}t|| || }t|d D ]}|	||  }|||  }|	|| d  }||| d  }|dkpt|	|| d  pt||| d  }||d kpNt|	|| d  pNt||| d  }|s\rfd} d}!n |	|| d  } ||| d  }! || |||||||||||||| |!|g|R   qq:d S Nr  r   r   r   r   r{   r  rc   r  rr   r   )"r;   r<   r=   r>   r?   r@   rA   rB   rB  rC  rD  rE  r   rC   r&   r  r   
x_flat_len
y_flat_lenr  x_start_indexx_stop_indexy_start_indexy_stop_indexsegment_lenr(  r   r   r   r   r  r  r  r	  r  r   r   rG    sZ    


z9_build_extend_line_axis1_ragged.<locals>.extend_cpu_numbac                   sl   |j }|j}|	j }|	j}t|
d }tdd |d | D } | ||||||||||||
|g|R   d S )Nr   c                 s  s   | ]}||  fV  qd S r   r*  r,  r   r   r   r   Z  r[   zU_build_extend_line_axis1_ragged.<locals>.extend_cpu_antialias_2agg.<locals>.<genexpr>)rA  r   rc   r   )r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   r   rC   rB  rC  rD  rE  r.  r/  extend_cpu_numba_antialias_2aggr   r   r2  P  s    zB_build_extend_line_axis1_ragged.<locals>.extend_cpu_antialias_2aggc           !        s  |d u}|rt dnd }t|}t|	}t|}t|D ]x}|| }||d k r`||d  n|}|
| }||d k r|
|d  n|}t|| || }t|d D ]}|	||  }|||  }|	|| d  }||| d  }|dkpt|	|| d  pt||| d  }||d kpLt|	|| d  pLt||| d  } || ||||||||| ||||dd|g|R   q|dkr d S  ||dk ||d k r:| q:| d S rH  rI  )!r;   r<   r=   r>   r?   r@   rA   rB   rB  rC  rD  rE  r   r/  rC   r&   r  r   rJ  rK  r  rL  rM  rN  rO  rP  r(  r   r   r   r   r  r  r4  r5  r6  r*   r   r   rR  a  s\    





zH_build_extend_line_axis1_ragged.<locals>.extend_cpu_numba_antialias_2aggr   r*   r%   r   rH   r2  r   r4  r5  r6  r*   rG  rR  r)   r   r     s    
9=r   c                   sr   |d ur|\ |d ufdd}t |fddfdd}t | fddrj|S |S d S )	Nc                   s   |j }| }|j}t|dkr*|\}}n|d }tt|}|jd ur`|j||||f}ntjdt|dd} | |||||||||||||	|
g|R   d S )Nr   r   uint32Zdtype)	buffer_valuesisnabuffer_offsetsrc   r{   arange_sindexsindex
intersects)r;   r<   r=   r>   r?   r@   rA   rB   r   r   r   rC   r}   missingoffsetsoffsets0offsets1eligible_indsrF  r   r   rH     s"    


z5_build_extend_line_axis1_geometry.<locals>.extend_cpuc           !        s  |d u}|rt dnd }|D ]}|	| r.q|
| }|
|d  }t||D ]}|| }||d  }t||d dD ]|}|| }t |sqv||d  }t |sqv||d  }t |sqv||d  }t |sqv||kr| p||kot ||d   pt ||d   }| r2||d kph||d k oht ||d   pht ||d   }|svrd}d} nB||kr|r||d  }||d  } n||d  }||d  }  || ||||||||||||||| |g|R   qvqLqd S Nr  r   r   r   r   r   r   r{   r  r  isfinite)!r;   r<   r=   r>   r?   r@   rA   rB   r}   r_  ra  rb  rc  r   r   rC   r&   r  r  start0stop0r(  start1stop1kr   r   r   r   r  r  r  r	  r  r   r   rG    sZ    





((z;_build_extend_line_axis1_geometry.<locals>.extend_cpu_numbac                   s   |j }| }|j}t|dkr*|\}}n|d }tt|}|jd ur`|j||||f}ntjdt|dd}t|
d }t	dd |d | D } | |||||||||||||	|
|g|R   d S )Nr   r   rV  rW  c                 s  s   | ]}||  fV  qd S r   r*  r,  r   r   r   r   !  r[   zW_build_extend_line_axis1_geometry.<locals>.extend_cpu_antialias_2agg.<locals>.<genexpr>)
rX  rY  rZ  rc   r{   r[  r\  r]  r^  r   )r;   r<   r=   r>   r?   r@   rA   rB   r   r   r   rC   r}   r_  r`  ra  rb  rc  r.  r/  rQ  r   r   r2    s&    


zD_build_extend_line_axis1_geometry.<locals>.extend_cpu_antialias_2aggc           !        s  |d u}|rt dnd }d}|D ]}|	| r2q"|
| }|
|d  }t||D ]P}|| }||d  }t||d dD ]$}|| }t |sqz||d  }t |sqz||d  }t |sqz||d  }t |sqz||kr| p||kot ||d   pt ||d   }| r6||d kpl||d k olt ||d   plt ||d   } || ||||||||| ||||dd|g|R   qzqP || d	}| q"| d S )
Nr  Tr   r   r   r   r   r   Fre  )!r;   r<   r=   r>   r?   r@   rA   rB   r}   r_  ra  rb  rc  r   r   r/  rC   r&   r  
first_passr  rg  rh  r(  ri  rj  rk  r   r   r   r   r  r  rS  r   r   rR  )  sT    





((

zJ_build_extend_line_axis1_geometry.<locals>.extend_cpu_numba_antialias_2aggr   rT  r   rU  r   r     s    
=!;r   c                   s   |d ur|\|d udd l fdd  fdd}t|fdd fdd	}t|fd
dr|S |S d S )Nr   c                   s     | }|d }| jj jj jj jjfvrDtdt| |d  }| jjkr||d d }t	
t|}d}nV| jjkr|d \}}d}n8| jjkr|d \}}}|| }d}n|d \}}d}||||fS )Nr   zlCanvas.line supports GeoPandas geometry types of LINESTRING, MULTILINESTRING, MULTIPOLYGON and POLYGON, not r   r   FT)Zto_ragged_arrayZGeometryTypeZ
LINESTRINGZMULTILINESTRINGZMULTIPOLYGONZPOLYGONrb   reprZravelr{   r[  rc   )r   ZraggedZgeometry_typecoordsr`  outer_offsetsr   Ztemp_offsets)shapelyr   r   _process_geometryt  s4    
z=_build_extend_line_axis1_geopandas.<locals>._process_geometryc
                   s<    |\}}}}| ||||||||||||	g|
R   d S r   r   )r;   r<   r=   r>   r?   r@   rA   rB   r   r   rC   rn  r`  ro  r   )rq  rG  r   r   rH     s    z6_build_extend_line_axis1_geopandas.<locals>.extend_cpuc                    s  |d u}|rt dnd }t|
d }t|D ]}|
| }|
|d  }t||D ]}|	| }|	|d  }td| d| d dD ]v}|| }||d  }||d  }||d  }t |rt |rt |rt |sq||kr| p"||ko"t ||d   p"t ||d   }| r:||d kpp||d k opt ||d   ppt ||d   }|s~rd}d}nB||kr|r||d  }||d  }n||d  }||d  } || ||||||||||||||||g|R   qqRq.d S rd  r{   r  rc   r  rf  ) r;   r<   r=   r>   r?   r@   rA   rB   r}   r`  ro  r   r   rC   r&   r  n_multilinesr  rg  rh  r(  ri  rj  rk  r   r   r   r   r  r  r  r	  r  r   r   rG    sT    
((z<_build_extend_line_axis1_geopandas.<locals>.extend_cpu_numbac
                   sd    |\}}}}t |	d }tdd |
d | D }| ||||||||||||	|g|
R   d S )Nr   c                 s  s   | ]}||  fV  qd S r   r*  r,  r   r   r   r     r[   zX_build_extend_line_axis1_geopandas.<locals>.extend_cpu_antialias_2agg.<locals>.<genexpr>r-  )r;   r<   r=   r>   r?   r@   rA   rB   r   r   rC   rn  r`  ro  r   r.  r/  )rq  rR  r   r   r2    s    zE_build_extend_line_axis1_geopandas.<locals>.extend_cpu_antialias_2aggc                    s  |d u}|rt dnd }t|
d }d}t|D ]}|
| }|
|d  }t||D ]R}|	| }|	|d  }td| d| d dD ]}|| }||d  }||d  }||d  }t |rt |rt |rt |sq||kr| p&||ko&t ||d   p&t ||d   }| r>||d kpt||d k ott ||d   ptt ||d   }|| |||||||||||||dd|g|R   qqV || d	}| q2| d S )
Nr  r   Tr   r   r   r   r   Frr  ) r;   r<   r=   r>   r?   r@   rA   rB   r}   r`  ro  r   r   r/  rC   r&   r  rs  rl  r  rg  rh  r(  ri  rj  rk  r   r   r   r   r  r  rS  r   r   rR    sN    
((

zK_build_extend_line_axis1_geopandas.<locals>.extend_cpu_numba_antialias_2agg)rp  r	   rT  r   )	rq  r4  r5  r6  r*   rG  rR  rp  r)   r   r   l  s     
!20r   )F)F)9
__future__r   r   numpyr{   Ztoolzr   Zdatashader.antialiasr   Zdatashader.glyphs.pointsr   r   Zdatashader.utilsr   r   r	   Znumbar
   Znumba.typestypesr%  r/   Zcupyr   Ztransfer_functions._cuda_utilsr   r   Zspatialpandas	Exceptionr   r+   r,   rQ   r   r   r   r   r   r   r   r#   r   r   r   r   r   r  r  r$   rM   r   r   r   r   r   r   r   r   r   r   r   <module>   sr   

/\oJJE7$G
.
0




 !/B5\a cc % G