
    tf_*                     ~    d dl Z d dlZd dlZd dlZd dlZd dlmZ ddej                  fdZ
d Zd Zd Zd Zd	 Zd
 Zy)    N   )g    .Ac           	      V   ddl m} t        j                  |      rt	        j
                  |       t        j                  |d      }d}t        |       }d|z  }	t        j                  t        j                  ||z        t        j                  d      z        }
|j                  ddd	      }||j                  d
<   ||j                  d<   ||j                  d<   |
|j                  d<   |d|
z  z  |j                  d<   |j                  | |      }|j                  | |      }|j                  | |      } t        d|
|      D ]  }|j!                  dt#        |      z   t        |       fdd      }|j!                  dt#        |      z   t        |       fdd      }|j!                  dt#        |      z   t        |       fdd      }|j%                  | |       |j%                  ||       |j%                  ||       t        |       |	z  dk7  r{|j'                  | | d   g|	t        |       |	z  z
  z  f      } |j'                  ||d   g|	t        |      |	z  z
  z  f      }|j'                  ||d   g|	t        |      |	z  z
  z  f      }| j)                  |      } | j)                  |      }| j)                  |      }|j+                  || d|	i      } |j+                  t,        j.                  |d|	i      }|j+                  t,        j0                  |d|	i      } |j3                          y)a  
    Downsample a dataset so that it's compatible with HiGlass (filetype: hitile, datatype: vector)

    Parameters
    ----------
    old_data: np.array
        A numpy array containing the data to be downsampled
    filename: string
        The output filename where the resulting multi-resolution
        data will be stored.
    zoom_step: int
        The number of zoom levels to skip when aggregating
    r   Nwi      meta)   f)dtype	tile-size	zoom-step
max-lengthmax-zoomz	max-widthvalues_gzip)r
   compressionmins_maxs_)
dask.arrayarrayopexistsosremoveh5pyFilelenmathceillogcreate_datasetattrs
from_arrayrangerequire_datasetstrstoreconcatenaterechunkcoarsennpminmaxclose)old_datafilename	zoom_stepchunksagg_functiondaf_new	tile_sizemax_poszoom_factormax_zoomr   min_datamax_datazvalues_dset	mins_dset	maxs_dsets                     ^/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/clodius/tiles/hitile.pyarray_to_hitilerA   	   s     	yy
		(IIh$EI(mG y.Kyy'I"56!DEHC8D'DJJ{'DJJ{&DJJ|%DJJz'!x-7DJJ{}}Xv.H}}Xv.H}}Xv.H1h	* 4++AX 0 , 
 ))c!fs8}.cv * 
	 ))c!fs8}.cv * 
	 	;'
9%
9%
 x=;&!+~~HRL>[3x=;;V-VWXH ~~HRL>[3x=;;V-VWXH ~~HRL>[3x=;;V-VWXH ##F+##F+##F+ ::lHq+6FG::bffhK0@A::bffhK0@A	c4n 
KKM    c                    t        |       |z  dk7  r-t        j                  | | d   g|t        |       |z  z
  z  f      } | j                  t	        j
                  t        |       |z        |f      j                  d      S Nr   r   r   )axis)r   r+   r(   reshaper   r   suma
num_to_aggs     r@   	aggregaterK   n   s    
1v
aNNA"w*s1v
7J*JKLM99diiA 34jABFFAFNNrB   c                    t        |       |z  dk7  r-t        j                  | | d   g|t        |       |z  z
  z  f      } | j                  t	        j
                  t        |       |z        |f      j                  d      S rD   )r   r+   r(   rF   r   r   r,   rH   s     r@   aggregate_minrN   u   rL   rB   c                    t        |       |z  dk7  r-t        j                  | | d   g|t        |       |z  z
  z  f      } | j                  t	        j
                  t        |       |z        |f      j                  d      S rD   )r   r+   r(   rF   r   r   r-   rH   s     r@   aggregate_maxrP   |   rL   rB   c                    |d|z  kD  rt        d       g g g fS |dk  rt        d       g g g fS | d   }t        |j                  d         }t        |j                  d         }t        |j                  d         }|d|z  z  }d	|j                  v rt        |j                  d	         }n|}||z
  }	|t        j                  |	|z        z  }
|	|
z
  }d|z  }||z  }t        |d|z  z  |z        }t        ||z         }t        |d|
z  z        }| d
t        t        |
            z      }| dt        t        |
            z      }| dt        t        |
            z      }||kD  rt        j                  ||z
        }|j                  t        j                         t        j                  ||z
        }|j                  t        j                         t        |t        |            }t        |t        |            }n||k  r||k  r||| dd }t        j                  ||dz   | ||| dd }t        j                  ||dz   | ||| dd }t        j                  ||dz   | t        |t        |            }t        |t        |            }t        |t        |            }nHt        ||| t        |            }t        ||| t        |            }t        ||| t        |            }d}dt        t        |
            z   | v rx| dt        t        |
            z      }t        ||| t        |            }d||z
  z  }t        j                  t        |            }|j                  |       ||z
  }||z  }||fS ||fS )z
    Return a tile from an hdf_file.

    :param hdf_file: A file handle for an HDF5 file (h5py.File('...'))
    :param z: The zoom level
    :param x: The x position of the tile
    r   zOUT OF RIGHT RANGEr   zOUT OF LEFT RANGEr   r   r   r   zmax-positionr   r   r   Nr   nan_values_)printintr"   r   floorr&   r+   zerosfillnanrK   rN   rP   r   )hdf_filer<   xdr6   r1   r9   	max_widthmax_positionrznext_stored_zoomzoom_offsetrJ   total_in_length	start_posend_posr	   f_minf_maxrI   a_min	ret_array	min_arraya_max	max_arrayf_nan	nan_arraynum_aggregatednum_vals_arraynum_summed_arrayaverages_arrays                                  r@   get_datarq      s    	16z"#B|1u!"B|AAGGK()IAGGK()I177:&'HAM)I 177>23 	AB !4::b9n#==''K k!J*,O Qk))I57I)o-.G |a+;&;;<L 	S%5!6778AWs3'7#899:EWs3'7#899:E<HHWy()	rvv9,-

266 aZ1	!%Z9	 
\	!lW&<i #(*,
W%i(+,.FFlQ)i(+,.FFlQ)aZ1	!%Z9	!%Z9	a	'2C
OD	!%	'":C
OL	!%	'":C
OL	 Es3/011X=S1A-B)CCDeIg6JH	x!|,#i.1N+)I5"%55	955y),,rB   c           	         t        j                  | d      }|d   }d|j                  v r|j                  d   }nd}d|j                  v r|j                  d   }n|j                  d   }t        |      gt        |      gdt	        j
                  t	        j                  ||z
        t	        j                  d      z        z  t        |j                  d         t        |j                  d	         d
S )aI  
    Get the tileset info for a hitile file.

    Parameters
    ----------
    hitile_path: string
        The path to the hitile file

    Returns
    -------
    tileset_info: {'min_pos': [],
                    'max_pos': [],
                    'tile_size': 1024,
                    'max_zoom': 7
                    }
    rr   zmin-posr   zmax-posr   r   r   r   )r7   min_posr\   r9   r6   )r   r   r"   rT   r   r   r    )hitile_pathrY   r[   rt   r7   s        r@   tileset_inforv      s    " yyc*HAAGG'')$AGG'')$'',' L>L>$))DHHWw->$?$((1+$MNN
+,-. rB   c           	         g }|D ]  }|j                  d      }t        t        t        |dd             }t	        t        j                  |       |d   |d         \  }}}	 t        j                  |j                  d            j                  d      t        j                  |j                  d            j                  d      t        j                  |j                  d            j                  d      dd}	|||	fgz  } |S )a  
    Generate tiles from a hitile file.

    Parameters
    ----------
    tileset: tilesets.models.Tileset object
        The tileset that the tile ids should be retrieved from
    tile_ids: [str,...]
        A list of tile_ids (e.g. xyx.0.0) identifying the tiles
        to be retrieved

    Returns
    -------
    tile_list: [(tile_id, tile_data),...]
        A list of tile_id, tile_data tuples
    .r      r   float32zutf-8)denseminsmaxsr
   )splitlistmaprT   rq   r   r   base64	b64encodeastypedecode)
filepathtile_idsgenerated_tilestile_idtile_id_partstile_positionr{   r|   r}   
tile_values
             r@   tilesr     s    " O $3c*SmAa&89:&IIhq!1=3C
d	, %%ell9&=>EEgN$$T[[%;<CCGL$$T[[%;<CCGL	

 	Wj122I$3L rB   )r   r   r   numpyr+   r   os.pathpathr   rG   rA   rK   rN   rP   rq   rv   r    rB   r@   <module>r      sO        	  #$FbJOOOp-f%P9rB   