
    bi                        d dl mZ d dlZd dlZd dlmZ d dlZd dlm	Z	  ed      dd       Z
dZdd	Zdd
ZddZddZddZddZd ZddZd Zy)    )annotationsN)	lru_cache)cached_cumsumi   )maxsizec                   t        t        t        |             }t        j                  |      j                         rt        d      t        |      st        d      t        |       dk(  rt        d      t        |       dk(  rt        | fd|i|S t        |       dk(  rt        | fd|i|S t        |       dk(  rt        | 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shapes       I/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/array/svg.pysvgr      s     #c6"#E	xx!C
 	
 u:!"OPP
6{a!"HII
6{af242622	V	f242622	V	f242622f242622    z9font-size="1.0rem" font-weight="100" text-anchor="middle"c                ~   t        t        t        |             }|xs t        ||      }t	        | |      \  }}t        |||||      \  }\  }	}
}}d|
dz   |dz   fz  }d}|d   dk\  rd}nd}d	d
d|
dz  |dz   t        |d   fz  d|
dz   |dz  t        ||
dz   |dz  |d   fz  g}|dj                  ||z         z   |z   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texts                    r   r   r   1   s   #c6"#E1ZD1Evu%DAq*2	1V$T+'E'E5%
 	S2:urz
"	#  FQx3 	-19ebj*eAh
7	8I2:uqy*febj%!)USTX
V	WD DIIedl++f44r   c                   t        t        t        |             }|xs t        ||      }t	        | |      \  }}}|\  }}	t        |dz  ||dz   |	dz   fd|      \  }
\  }}}}t        ||dz  |dz   |	dz   fd|      \  }\  }}}}t        ||||z   dz   |	|z   fd|      \  }\  }}}}d	|d
z   |d
z   fz  }d}|d   dk\  rd}nd}ddd||z   dz  |dz   t        |d   fz  d|dz   ||z   dz  t        ||dz   ||z   dz  |d   fz  d||z   dz  dz
  |||z
  dz  z
  dz   t        ||z   dz  dz
  |||z
  dz  z
  dz   |d   fz  g}|dj                  |
|z   |z   |z         z   |z   S )Nr    g333333?
   r   )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	   r5   r"   r   r7   r6   zoxoyxymnxmxxmnymxyzx_r:   zymin_zmax_zr;   r<   r=   r>   r?   r@   s                              r   r   r   Q   s   #c6"#E1ZD1E&%(GAq!FB'	CBGR!V,6 Bc3 $	1s7BGR!V,6BAq% (0	1b5j2orEz2d($B$ue
 	S2:urz
"	#  FQx3 	-EMQ
Ja
A	BIBJU]aBJU]a!H
		
 	J3Y!Ob 39/!B&3Y!Ob 39/!B&!H
	
D4 DIIb2glT122V;;r   c                   t        |       dz  dk(  rd| z   } t        t        t        |             }t	        ||      }| }|}g }d}d}|rt        |      dz  xs d}	t        |d |	 |d |	 |df      }
||	d  }||	d  }|
j                  d      }|d   }t        t        j                  d|      j                         d         }t        ||      }t        t        j                  d	|      j                         d         }||d
z   z  }dj                  |dd       }
|j                  |
       |rd||fz  }d}|dj                  |      z   |z   S )Nr   r   )r   r    r   )r5   r"   r.   zheight="(\d*\.?\d*)"zwidth="(\d*\.?\d*)"rB   r$   r&   z

)r   r   r   r   r0   r   splitfloatresearchgroupsmaxr4   append)r   r	   r   r5   chunks2sizes2outlefttotal_heightnor8   r=   heightwidthr>   s                   r   r   r      sp   
6{Q!6!#c6"#Eu4(EGF
CDL
L1!6"1:tQi@!"+qryy!8&AHHJ1MN<0bii 6?FFHKL
IIeAbk"

1 " 	S
	  FFKK$$v--r   c           	     $   t        |       }||kD  rt        j                  d|dz
  |d      }nt        |      }|D cg c]  }d| |   ||   ||   ||   fz   }}|d   j	                  dd      |d<   |d   j	                  dd      |d<   |S c c}w )	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)dtypez*  <line x1="%d" y1="%d" x2="%d" y2="%d" />z /z style="stroke-width:2" /rS   )r   r   linspacerangereplace)	x1y1x2y2max_nr`   indicesir8   s	            r   	svg_linesrq      s     	BA5y++aQU;(  	51r!ubeRPQU7SSE 
 Qx&ABE!Hb	!!$(CDE"ILs   Bc                ~   t        j                  |      |d   z   }||d   z   }t        j                  || d         |d   z   }||d   z   }|d   r|| j                         |d   z  z  }|d   r||d   |z  z  }||d   |z  z  }t	        |j	                         |j	                               }	t	        |j	                         |j	                               }
t        |j                         |j                               }t        |j                         |j                               }|dz  }ddgt        |||||      z   }| |d   z   }t        j                  |       |d   z   }| |d   z   }t        j                  | |d         |d   z   }|d   r||d   | z  z  }||d   | z  z  }|d   r||d   |j                         z  z  }ddgt        |||||      z   }t        |       |k  rt        |      |k  rdnd	}|d    d
|d    d|d    d
|d    d|d    d
|d    d|d    d
|d    }ddd| d| dg}||z   |z   |	||
|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   rS      r)   z  <!-- Horizontal lines -->z  <!-- Vertical lines -->ECB1728B4903, z  <!-- Colored Rectangle -->z  <polygon points="z" style="fill:#zA0;stroke-width:0"/>)r   
zeros_like	full_likerY   minrq   r   )r7   r6   r"   r#   r	   rj   rk   rl   rm   r9   r;   r:   r<   rn   h_linesv_linescolorcornersrects                      r   r2   r2      s    
q	F1I	%B	
VAYB	a2	&)	+B	
VAYBAw
aeegQAw
d1gk
d1gk"&&(#E"&&(#E"&&(#E"&&(#EAIE01Ib"b"e4TTG 
VAYB	q	F1I	%B	
VAYB	a2	&)	+BAw
d1gk
d1gkAw
d1g./)BBE2RRGA3q6E>HxEAqAqB"R&2b6(!BrF81RUG1RPQUGTG
&
gYoeW<PQD Wt#eUE5%AAAr   c                     t        d| z   fi |S )NrR   )r   )r   r5   r   s      r   r   r      s    'F"-f--r   c           	         | D cg c]"  }t        j                  t        |d            $ }}t        ||      D cg c]  \  }}||z  |d   z   }}}|S c c}w c c}}w )NT)initial_zerorS   )r   arrayr   zip)r   r5   c	cumchunksr7   r	   pointss          r   r1   r1     s^    HNO1-=>OIO.1)U.CD71da$h2DFDM PDs
   'AAc                    t        |       }| D cg c]  }|t        d|      z   }}|D cg c]  }t        |       }}t        fd|D              S c c}w c c}w )z%Get size in pixels for all dimensionsg?c              3  (   K   | ]	  }|z    y wN ).0rr	   s     r   	<genexpr>zdraw_sizes.<locals>.<genexpr>  s     *a*s   )rY   ratio_responser   )r   r	   mxdratiosr   s    `    r   r0   r0   	  s[    	UB(-.1b3sA;.F.)/0AnQ0F0*6*** /0s
   AAc                    | t         j                  k  r| S | dk  rt        j                  | dz         S t        j                  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)r7   s    r   r   r     s=     	466z	
cxxD!!xx
##r   )   )rC   rC   r   N)r   NrC   )r,   )rC   rC   r   r   )
__future__r   r   rV   	functoolsr   numpyr   
dask.utilsr   r   r3   r   r   r   rq   r2   r   r1   r0   r   r   r   r   <module>r      sk    "  	   $ 33 3B I
5@6<r .F45Bp.+$r   