
    tf)                         d dl Z d dlZd dlZd dlZd dlZd dlZd dl	m
c mZ ddlmZmZ d dlmZ dZdZdZd Z ej,                  e      Zi Zddded<   dd	Zd
 Z	 	 	 	 ddZi dfdZ
d Zy)    N   )abs2genomicget_quadtree_depth)ThreadPoolExecutorsignificant   Significant)namevaluec                 D    t        j                  | |      }t        |d<   |S )Nrange_modes)hgbitileset_infor   )bbpath
chromsizestis      ^/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/clodius/tiles/bigbed.pyr   r      s#    			6:	.B#B}I    c           	         | \	  }}}}}}}}}		 	 |j                   |   }
t        j                  t        j                  ||
||	      }|dk(  r |        |       }}n |        |       }}d}d}i }|D ]  }|||j                   |   <   ||z  }|dz  }  g }d}g }|s|S |D ]%  }	 |j                  t        |d                |dz  }' ||k\  r5||k  r0|D ])  }	 t        |d         }|j                  |
   ||d       + |S ||kD  rg }||z  }t        t        j                  |d|z
              }|D ].  }	 t        |d         }||k\  r|j                  |
   ||d       0 t        |      }||kD  r:t        j                  t!        |      |      }t#        |      D cg c]  }||   	 }}|S # t
        $ r	 d\  }}Y Ut        $ r	 d\  }}Y ew xY w# t        t
        f$ r |j                  t               Y :w xY w# t        t
        f$ r  |j                  |
   t        |d       Y Yw xY w# t        t
        f$ r) t        |k\  r|j                  |
   t        |d       Y 6w xY wc c}w )Nr   )NNr   r      )	chrOffset
importancefields)indexftpartialbbifetch_intervals
IndexErrorKeyErrorappendint
ValueErrorDEFAULT_SCOREnpquantilelenrandomsamplerangesorted)ar   binsizer   
range_modemin_elementsmax_elementscidstartendchromfetch_factory	intervals
intervals2offset	offsetIdx
chrOffsetschrSizefinal_intervalsintervals_lengthscoresintervalscorethresholded_intervalsdesired_percthresholded_scorethresholded_intervals_lengthindicesis                                r   
fetch_datarG      s    	

(T+  %

3#6#6ucR&$1O]_zI$1O]_zI FIJ 28
:##I./'Q	
 OF 	)MM#hqk*+ 	A <',<,L" 	HHQK(&&%/%6&+"*	` ; 
L	( "#&66FA4D EF" 	HHQK(--)00)3E):*/&.		( (++@'A$',6mmE*F$GVGAGQA4Q7QOQe  + !+	: + *	:+, J' 	)MM-(	)  
+ &&%/%6&3"*0 
+  $55)00)3E):*7&. RsT   AF+  G&G;2+H-I(+G<GG$G87G8;+H*)H*-4I%$I%c                    |t        j                  |       }|t        }|t        }t        j                  |      }||   }	t        t        |||            }
t        d      5 }t        |j                  t        |
D cg c]  }t        | |	||||gt        |      z         ! c}            }d d d        D cg c]
  }|g k7  s	| }}|D cg c]  }|D ]  }|  c}}S c c}w # 1 sw Y   <xY wc c}w c c}}w )N   )max_workers)r   get_chromsizesMIN_ELEMENTSMAX_ELEMENTSget_zoom_resolutionslistr   r   maprG   tuple)r   
zoom_level	start_posend_posr   r.   r/   r0   resolutionsr-   cids_starts_endsecarraysxresultssublistitems                     r   get_bigbed_tiler^      s    ((0
##++J7K*%GK
IwGH		+ 
qEE .  "#&&(( q'"


, !,QAGq,G, '<WG<DD<D<<'	
 
, -<s0   $C(>$C#"C(9
C4C4C9#C((C1c                    d}d}g }|D ]  }|j                  d      dd }|j                  d      d   }	|	j                  d      }
t        t        t        |
dd             }t	        |
      dkD  r|
d   nt
        }|t        v r|nd}t        |D cg c]  }|j                  d       c}      }d	|v rt        |d	         }d
|v rt        |d
         }||kD  r|}|}|}n||k(  r|}|dz   }|dk  rt        }t        }|rE|D cg c]  }|d   	 }}|D cg c]  }t        |d          }}t        j                  ||      }nd}d|v r|d   }||v r||   }nd}|d   }|d   }|t        j                  |       }t        |t        j                        }t        j                  d||z
  z  z  }||z  }||z   }t!        | |||||||      }|||fgz  } |S c c}w c c}w c c}w )a  
    Generate tiles from a bigbed 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
    chromsizes_map: {uid: []}
        A set of chromsizes listings corresponding to the parameters of the
        tile_ids. To be used if a chromsizes id is passed in with the tile id
        with the `|cos:id` tag in the tile id
    chromsizes: [[chrom, size],...]
        A 2d array containing chromosome names and sizes. Overrides the
        chromsizes in chromsizes_map

    Returns
    -------
    tile_list: [(tile_id, tile_data),...]
        A list of tile_id, tile_data tuples
    |r   Nr   .   :minmax)r   cos   )r.   r/   r0   )splitrO   rP   r"   r'   DEFAULT_RANGE_MODEr   dictrL   rM   pdSeriesr   rK   r   	TILE_SIZEr^   )r   tile_idschromsizes_mapr   r/   r0   generated_tilestile_idtile_option_partstile_no_optionstile_id_partstile_positionreturn_valuer.   otile_optionstemp_min_elementsrX   
chromnameschromlengthschromsizes_to_usechromsizes_idrR   tile_pos	max_depth	tile_sizerS   rT   
tile_values                                r   tilesr      s]   2 LLO C3#MM#.qr2!--,Q/'--c2SmAa&89: #M 2Q 6M!<N 	 &2[%@\d
3DEaQWWS\EFL |E23LL |E23L,& ,'L,L\)'L'!+L1'L'L(231!A$3J3/9:!C!I:L: "		,j I M$ ,U 3.$2=$A!$(!"1%
 # $ $ 3 3F ;&'8$..I	NNQ9z+A%BB	y(	i'$!%%	

 	Wj122GC3J u F( 4:s   G
GG"c                 ,    t        j                  |       S N)r   r   )filenames    r   r   r   I  s    ??8$$r   r   )NNNN)r   	functoolsr   loggingnumpyr%   pandasrl   r(   clodius.tiles.bigwigr   bigwigr   utilsr   r   concurrent.futuresr   rj   rL   rM   r$   	getLogger__name__loggerr   r   rG   r^   r    r   r   <module>r      s    
      # # 2 1" 			8	$&3mLM Sv .=b ,.$ bJ%r   