o
    Nrfp                     @  s   d dl mZ d dlZd dlZd dlZdddZdZddd	Zdd
dZ	dddZ
dddZdddZd ddZdd ZdddZdd ZdS )!    )annotationsN   c                 K  s   t tt| }t| rtdt|stdt| dkr$tdt| dkr4t	| fd|i|S t| dkrDt
| fd|i|S t| dkrTt| fd|i|S t| fd|i|S )	zConvert chunks from Dask Array into an SVG Image

    Parameters
    ----------
    chunks: tuple
    size: int
        Rough size of the image

    Returns
    -------
    text: An svg string depicting the array as a grid of chunks
    zbCan't generate SVG with unknown chunk sizes.

 A possible solution is with x.compute_chunk_sizes()z+Can't generate SVG with 0-length dimensionsr   z$Can't generate SVG with 0 dimensions   size      )tuplemapsumnpisnananyNotImplementedErroralllensvg_1dsvg_2dsvg_3dsvg_nd)chunksr   kwargsshape r   W/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/dask/array/svg.pysvg	   s    r   z9font-size="1.0rem" font-weight="100" text-anchor="middle"r   r   c                 C  s   t tt| }|pt||d}t| |\}}t|||||d\}\}	}
}}d|
d |d f }d}|d dkr:d}nd}d	d
d|
d |d t|d f d|
d |d t||
d |d |d f g}|d||  | S )Nr   offsetskewr   G<svg width="%d" height="%d" style="stroke:rgb(0,0,0);stroke-width:1" >
2   
</svg>r   d      <!-- Text -->#  <text x="%f" y="%f" %s >%d</text>r      r   ?  <text x="%f" y="%f" %s transform="rotate(%d,%f,%f)">%d</text>
r   r	   r
   
draw_sizesgrid_pointssvg_grid
text_stylejoin)r   r   r   r   sizesr   yxlinesmin_xmax_xmin_ymax_yheaderfooterrotatetextr   r   r   r   -   s0   
$	r   c                 C  s  t tt| }|pt||d}t| |\}}}|\}}	t|d ||d |	d fd|d\}
\}}}}t||d |d |	d fd|d\}\}}}}t|||| d |	| fd|d\}\}}}}d	|d
 |d
 f }d}|d dkrud}nd}ddd|| d |d t|d f d|d || d t||d || d |d f d|| d d ||| d  d t|| d d ||| d  d |d f g}|d|
| | |  | S )Nr   g333333?
   r   )r   r   r   )r   r   r   r    r!   r"   r   r#   r$   r%   r&   r'   r   r(   r)   z?  <text x="%f" y="%f" %s transform="rotate(45,%f,%f)">%d</text>r*   r+   )r   r   r1   r   r   r3   r2   zoxZoyZxyZmnxZmxxZmnyZmxyZzx_r6   ZzyZmin_zZmax_zr7   r8   r9   r:   r;   r<   r   r   r   r   M   s^   


r   c                 C  s.  t | d dkrd|  } ttt| }t||d}| }|}g }d}d}|rt |d p,d}	t|d |	 |d |	 |dfd}
||	d  }||	d  }|
d}|d }tt	d|
 d }t||}tt	d	|
 d }||d
 7 }d|dd }
||
 |s%d||f }d}|d| | S )Nr   r   )r   r   r   )r1   r   r*   zheight="(\d*\.?\d*)"zwidth="(\d*\.?\d*)"r=   r    r"   z

)r   r   r	   r
   r,   r   splitfloatresearchgroupsmaxr0   append)r   r   r   r1   Zchunks2Zsizes2outleftZtotal_heightnor4   r9   heightwidthr:   r   r   r   r      s:   "


r   r(   c                   st   t  }||krtjd|d |dd}nt|} fdd|D }|d dd|d< |d	 dd|d	< |S )
a5  Convert points into lines of text for an SVG plot

    Examples
    --------
    >>> svg_lines([0, 1], [0, 0], [10, 11], [1, 1])  # doctest: +NORMALIZE_WHITESPACE
    ['  <line x1="0" y1="0" x2="10" y2="1" style="stroke-width:2" />',
     '  <line x1="1" y1="0" x2="11" y2="1" style="stroke-width:2" />']
    r   r   int)Zdtypec                   s,   g | ]}d  | | | | f qS )z*  <line x1="%d" y1="%d" x2="%d" y2="%d" />r   ).0ix1x2y1y2r   r   
<listcomp>   s    zsvg_lines.<locals>.<listcomp>z /z style="stroke-width:2" /rB   )r   r   Zlinspacerangereplace)rT   rV   rU   rW   max_nrL   indicesr4   r   rS   r   	svg_lines   s   	r]   c                 C  s.  t ||d  }||d  }t || d |d  }||d  }|d r/||  |d  7 }|d rC||d | 7 }||d | 7 }t| | }	t| | }
t| | }t| | }|d }ddgt||||| }| |d  }t | |d  }| |d  }t | |d |d  }|d r||d |  7 }||d |  7 }|d r||d |  7 }ddgt||||| }t| |k rt||k rdnd	}|d  d
|d  d|d  d
|d  d|d  d
|d  d|d  d
|d  }ddd| d| dg}|| | |	||
|ffS )zCreate lines of SVG text that show a grid

    Parameters
    ----------
    x: numpy.ndarray
    y: numpy.ndarray
    offset: tuple
        translational displacement of the grid in SVG coordinates
    skew: tuple
    r   r   rB      r%   z  <!-- Horizontal lines -->z  <!-- Vertical lines -->ZECB172Z8B4903, z  <!-- Colored Rectangle -->z  <polygon points="z" style="fill:#zA0;stroke-width:0"/>)r   Z
zeros_likeZ	full_likerH   minr]   r   )r3   r2   r   r   r   rT   rV   rU   rW   r5   r7   r6   r8   r[   Zh_linesZv_linescolorZcornersrectr   r   r   r.      s@    Rr.   c                 K  s   t d|  fi |S )NrA   )r   )r   r1   r   r   r   r   r      s   r   c                 C  s&   dd | D }dd t ||D }|S )Nc                 S  s   g | ]	}t d | qS ))r   )r   Zcumsum)rQ   cr   r   r   rX          zgrid_points.<locals>.<listcomp>c                 S  s    g | ]\}}|| |d   qS )rB   r   )rQ   r3   r   r   r   r   rX     s     )zip)r   r1   Z	cumchunksZpointsr   r   r   r-      s   r-   c                   s>   t |   fdd| D }dd |D }tfdd|D S )z%Get size in pixels for all dimensionsc                   s   g | ]	} t d | qS )g?)rH   )rQ   d)mxr   r   rX     re   zdraw_sizes.<locals>.<listcomp>c                 S  s   g | ]}t |qS r   )ratio_responserQ   rr   r   r   rX   	  s    c                 3  s    | ]} | V  qd S Nr   rj   r   r   r   	<genexpr>
  s    zdraw_sizes.<locals>.<genexpr>)rH   r   )r   r   ratiosr   )rh   r   r   r,     s   r,   c                 C  s.   | t jk r| S | dkrt | d S t dS )a  How we display actual size ratios

    Common ratios in sizes span several orders of magnitude,
    which is hard for us to perceive.

    We keep ratios in the 1-3 range accurate, and then apply a logarithm to
    values up until about 100 or so, at which point we stop scaling.
    r#   g(@g\@)mathelog)r3   r   r   r   ri     s
   
	
ri   )r   )r   r   r   N)r   Nr   )r(   )r   r   r   rl   )
__future__r   ro   rE   numpyr   r   r/   r   r   r   r]   r.   r   r-   r,   ri   r   r   r   r   <module>   s    
!

 
9
#

8
