U
    _                     @   sV   d Z dZdddddgZdddZd	ZdddZdd Zdd ZedkrRe  e  dS )      I  I  I   	          )bedgff    r
   Tc                 C   s   | t ks|t kr"|rdS tdgS | dk r<|r2dS tdgS |dk rV|rLdS tdgS | t|  t? } |t? }tdg}tD ]L}|r| |kr||    S |tt||  || d  | tL } |tL }q||S )aS  
    Uses the definition of a "genomic bin" described in Fig 7 of
    http://genome.cshlp.org/content/12/6/996.abstract.

    Parameters
    ----------
    one : boolean
        If `one=True` (default), then only return the smallest bin that
        completely contains these coordinates (useful for assigning a single
        bin).

        If `one=False`, then return the set of *all* bins that overlap these
        coordinates (useful for looking for features that could intersect)

    fmt : 'gff' | 'bed'
        This specifies 1-based start coords (gff) or 0-based start coords (bed)
    r   r   )	MAX_CHROM_SIZEsetCOORD_OFFSETSFIRST_SHIFTOFFSETSupdatelistrange
NEXT_SHIFT)startstopfmtonebinsoffset r   ,lib/python3.8/site-packages/gffutils/bins.pyr   :   s.    



 
r   c               	   C   s   t tD ]\} }|}zt| d  }W n tk
r<   |}Y nX dt| t   }|}|d d }}|dkrv|d d }}|dkr|d d }}d||f }d| }td	jf t  qd
S )zP
    Useful for debugging: how large is each bin, and what are the bin IDs?
    r      i   ZKbZMbZGbz(%s %s)z%s bpzTlevel: {i:1};  bins {binstart:<4} to {binstop:<4}; size: {actual_size:<12} {size:<6}N)	enumerater   
IndexErrorr   r   printformatlocals)ir   ZbinstartZbinstopZbin_sizeZactual_sizesuffixsizer   r   r   print_bin_sizes   s$    
r&   c                   C   s  t dddddkstt dddddks,tt dddddtdd	d
ddgksRtt dddddttksntt dddddkstt dt d dt d ddtd kstt dddddkstt dt dt ddtd d kstt dddddtdd
d	ddgkstt dddddt dddddtdgksDtt dddddks\tt dt d dt ddtd kstt dt d dtt  d ddtd kstt dt d dtt  ddtd kstt dddddkstt ddddtdgkstt dddddks.tt ddddtdgksLtt dddddksdtt ddddtdgkstt dddddkstt dddddkstd S )Nr   r   r	   )r   r   r
   F)r   r   r   r   r   i r   i   iJ  i  T)r   iiiiH"  r   )r   AssertionErrorr   r   r   
differencer   r   r   r   r   test   st    &











r*   __main__N)r
   T)	r   r   r   r   r   r   r&   r*   __name__r   r   r   r   <module>"   s   	

IL