
    tf                        d dl Z d dlZd dlmZ d dlZddlmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZ dd	lmZmZ dd
lmZ d Z ej*                          ej,                  dd       ej.                  ddddde       ej.                  ddde ed      d       ej.                  ddd       ej.                  dddd !       ej.                  d"d#e$       ej.                  d%d&d'd(       ej.                  d)d*d+       ej.                  d,d-ed.       ej.                  d/d0dd !      d1                                                                              Zy)2    N)ceil   )apilock)HIGLASS_TILE_DIMlegacy_zoomifypreferred_sequencezoomify_cooler)parse_cooler_uri   )cli
get_logger)parse_field_paramc                    ddl m } t        t              }| g } nt        j                  |       } |j                  d|         |D ]d  }|dz   t        |      z   }dt        j                  |      j                         v r:|j                  d|        	 |j                  |g| d       f y # t        $ r!}|j                  }|d	}|d	k7  r|Y d }~d }~ww xY w)
Nr   balanceBalancing args: z::resolutions/weightz#Balancing zoom level with bin size coolerargs	prog_namer   )r   r   __name__shlexsplitdebugstrr   Coolerbinsinfomain
SystemExitcode)	r   resolutionsoutfilebalance_cmdloggerresurie	exit_codes	            \/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/cooler/cli/zoomify.pyinvoke_balancer.      s    /!F|{{4 
LL#D6*+ ((3s83szz#++--9#?@
	3,,(C  	I 	A~ 	s   B..	C7CCcool_uri	COOL_PATH)metavarz--nprocz-nz-pzcNumber of processes to use for batch processing chunks of pixels [default: 1, i.e. no process pool])helpdefaulttypez--chunksizez-cz*Number of pixels allocated to each processg    cAT)r2   r4   r3   show_defaultz--resolutionsz-rak  Comma-separated list of target resolutions. Use suffixes B or N to specify a progression: B for binary (geometric steps of factor 2), N for nice (geometric steps of factor 10 interleaved with steps of 2 and 5). Examples: 1000B=1000,2000,4000,8000,... 1000N=1000,2000,5000,10000,... 5000N=5000,10000,25000,50000,... 4DN is an alias for 1000,2000,5000N [default: B])r2   z	--balancez3Apply balancing to each zoom level. Off by default.F)r2   is_flagr3   z--balance-argszAdditional arguments to pass to cooler balance. To deal with space ambiguity, use quotes to pass multiple arguments, e.g. ``--balance-args '--nproc 8 --ignore-diags 3'``. Note that nproc for balancing must be specified independently of zoomify arguments.)r2   r4   z
--base-uriz-izAOne or more additional base coolers to aggregate from, if needed.)r2   multiplez--outz-ozOutput file or URIz--fieldzSpecify the names of value columns to merge as '<name>'. Repeat the ``--field`` option for each one. Use '<name>:dtype=<dtype>' to specify the dtype. Include ',agg=<agg>' to specify an aggregation function different from 'sum'.)r2   r4   r7   z--legacyz5Use the legacy layout of integer-labeled zoom levels.c
                    t        t              }
t        |       \  }}|	|j                  dd      }nt        |	      \  }}|
j	                  d|  d       |
j	                  d| d       |rt        | |||t              \  }}|rdd	lm} |g }nt        j                  |      }|
j                  d
|        t        t        |j                                     D ]x  \  }}|dz   t        |      z   }|t        |      k(  r&dt        j                   |      j#                         v rK|
j	                  d| d|        	 |j%                  |g|d       z yyt        j                   |       }|j*                  j,                  j/                         }|j0                  r(t3        t5        |t6        z              }|j0                  }nQ|j#                         ddg   dd }|d   |d   z
  j9                         }t3        t5        ||z  t6        z              }d}|d}g |}}|j                  d      D cg c]   }|j;                         j=                         " c}D ]  }d|v s	d|v r||k  rt?        j@                  d       |dk(  rtC        ||d      }n|dk(  rtC        ||d      }n|dk(  rddgtC        d|d      }n|jE                  d      r+t3        |j                  d      d         }tC        ||d      }nH|jE                  d      r+t3        |j                  d      d         }tC        ||d      }nt3        |      g}|jG                  |        tI        |      rw|D cg c]  }tK        |d       } }tM        |  \  }!}}"}#t        |!      }!tM        |!|"      D $%ci c]  \  }$}%|%	|$|% }"}$}%tM        |!|#      D $&ci c]  \  }$}&|&	|$|& }#}$}&nd gdd}#}"}!tO        | gt        |      ||||t        |!|"|#!	       |rtQ        |||       yy# t&        $ r"}|j(                  }|d}|dk7  r|Y d}~[d}~ww xY wc c}w c c}w c c}%}$w c c}&}$w )"zu
    Generate a multi-resolution cooler file by coarsening.

    COOL_PATH : Path to a COOL file or Cooler URI.

    Nz.coolz.mcoolzRecursively aggregating ""zWriting to "r   r   r   r   z::r   zBalancing zoom level z, bin size r   r   r   startendb,nzWMap is already < 256 x 256. Provide resolutions explicitly if you want to coarsen more.nicebinary4dni  i  i  F)includes_colnumcount)nprocr   columnsdtypesagg))r   r   r   replacer!   r	   r   r   r   r   r   reversedlistitemsr   r   r   r    r"   r#   r$   
chromsizesvaluessumbinsizeintr   r   meanstriplowerwarningswarnr
   endswithextendlenr   zipr   r.   )'r/   rD   	chunksizer%   r   balance_argsfieldlegacybase_urioutr(   infile_r&   n_zoomszoom_levelsr'   levelr)   r*   r+   r,   clrgenome_lengthmaxrescurresr    mean_fragsizerstringsrargfield_specifiersrE   rF   rG   coldtfs'                                          r-   zoomifyrr   1   sl   f !F *IFA
{..(3%c*

KK+H:Q78
KK,wiq)*-guid 
 7#!${{<8LL+L>:;&tK,=,=,?'@A  
sns5z1CL(3::c?#7#7#99 3E7+cUKL
 $$3*>*>($S  8 jj"--113 ;;m.>>?@F[[F88:w./2D!%[4=8>>@Mmm;>NNOPFF K  ";W/6}}S/AB!AGGIOO%B 	"CczSCZFVO> cz&vvv>&vvx@4K"4T66"JKc"#))C.+,&sFF;c"#))C.+,&sFH=XJq!)	", u:IN BE!#u=    '*+;&<#GQ7mG-0&-AT'#rR^c2gTFT(+GS(9Kfc1Q]36KCK %,9dDSVG 	'X'
	
 <g> a "   !I ($%	 A~ & > C. 
 UKs<   ?P2%P?"Q
Q	*Q	
QQ	P<P77P<)r   rT   mathr   click r   parallelr   reducer   r	   r
   r   utilr   r   r   _utilr   r.   commandargumentoptionrP   r   rr        r-   <module>r      s          $  $: 
K0
)	 	5	I 
	 	>	 
J 
 	L	 gt"67
L 
 	@	D? 8	 1 BD?r~   