
    tfp                    x    d dl mZ d dlZd dlZd dlZ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)    )annotationsNc                   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       X/var/www/html/software/conda/envs/higlass/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   -   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   r2   r   r   r4   r3   zoxoyxymnxmxxmnymxyzx_r7   zymin_zmax_zr8   r9   r:   r;   r<   r=   s                              r   r   r   M   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   )r2   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maxr1   append)r   r   r   r2   chunks2sizes2outlefttotal_heightnor5   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" /rP   )r   r   linspacerangereplace)	x1y1x2y2max_nr]   indicesir5   s	            r   	svg_linesrn      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   rP      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_likerV   minrn   r   )r4   r3   r   r    r   rg   rh   ri   rj   r6   r8   r7   r9   rk   h_linesv_linescolorcornersrects                      r   r/   r/      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 )NrO   )r   )r   r2   r   s      r   r   r      s    'F"-f--r   c                    | D cg c]  }t        j                  d|z          }}t        ||      D cg c]  \  }}||z  |d   z   }}}|S c c}w c c}}w )N)r   rP   )r   cumsumzip)r   r2   c	cumchunksr4   r   pointss          r   r.   r.      sZ    .454!8$5I5.1)U.CD71da$h2DFDM 6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   )rV   ratio_responser	   )r   r   mxdratiosr   s    `    r   r-   r-     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)r4   s    r   r   r     s=     	466z	
cxxD!!xx
##r   )   )r@   r@   r   N)r   Nr@   )r)   )r@   r@   r   r   )
__future__r   r   rS   numpyr   r   r0   r   r   r   rn   r/   r   r.   r-   r   r   r   r   <module>r      sQ    "  	 3B I
5@6<r .F45Bp.+$r   