B
    d                 @   s<   d dl mZmZmZ d dlmZ dd ZG dd deZdS )    )absolute_importdivisionprint_function)rangec             C   s  | }d g||d   }d}|d }x|D ]\}}|\}}	|\}
}||
krZ|	|krt |q(||
k rx|| |
 }|	| }n|
| | }||	 }|| }|d kr|||< q(||kr(t |q(W tt|}g }xt|D ]}|g  qW x2t|d D ] }xt|d |D ]}
|| |
 }|| }|d k	r|| }||
 }||krPq||krv|| }}|d9 }|
| }}
||
krq|| }|| }||krx&|D ]\}}||kr||7 }P qW |||f |||< x,|D ]$\}}|||| f |||< qW g ||< qW qW |d|kr8t |d t|d |d ksRtd g| }d|d< x>|d D ]2\}}|dkst|| d kst|||< qnW xpt|d D ]`}xXt|d |D ]F}
|| |
 }|| }|d k	r||
 ||  |krt |d qW qW |S )N   zequivalence.array_alignment(): zdirectly conflicting inputr   zinsufficient inputzindirectly conflicting input)RuntimeErrorlistr   appendcountlenAssertionError)Zmembers_sizeZi_mbr_byte_offset_pairsnZdiff_matrixZ
msg_prefixZmsg_directly_conflictingp0p1i0Za0i1Za1idddZcluster_indicesZclustersZci0Zci1c0c1oZdiffs0 r   p/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/fable/equivalence.pyarray_alignment   s    












r   c               @   s,   e Zd ZddgZdd Zdd Zdd Zd	S )
cluster_unionsunionsindicesc             C   s   g | _ i | _d S )N)r   r   )Or   r   r   __init__P   s    zcluster_unions.__init__c             C   s   d }x|D ]}| j |}|d krT|d krNt| j | j |< }| j|g q|}q
|d krx|| j |< | j| | q
||kr
||k r|| }}x,| j| D ]}|| j |< | j| | qW d | j|< q
W d S )N)r   getr   r   r
   )r   key_clusterZ
curr_indexkeyZ
prev_indexr   r   r   addT   s$    



zcluster_unions.addc             C   sT   g }i }x:| j D ]0}|d k	rx|D ]}t|||< q"W || qW || _ || _d S )N)r   r   r
   r   )r   r   r   unionr#   r   r   r   tidyi   s    
zcluster_unions.tidyN)__name__
__module____qualname__	__slots__r    r$   r&   r   r   r   r   r   L   s   r   N)	
__future__r   r   r   	six.movesr   r   objectr   r   r   r   r   <module>   s   I