B
    ž3Rcõ  ã               @   sh   d dl mZ d dlmZ d dlmZ d dlZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )é    )ÚChem)ÚAllChem)ÚdefaultdictNc             C   s.   x(t |  ¡ ƒD ]}|  |¡}|  |¡ qW d S )N)ÚrangeZGetNumAgentTemplatesZGetAgentTemplateÚAddReactantTemplate)ÚrxnÚaZagent© r	   ú.share/RDKit/Contrib/RxnRoleAssignment/utils.pyÚtransferAgentsToReactants(   s    
r   c             C   s*   g }|   |¡ x|D ]}|  |¡ qW d S )N)ZRemoveAgentTemplatesr   )r   Ztmpr   r	   r	   r
   Ú"removeAgentsAndTransferToReactants-   s    

r   c             C   s2   d}x(|   ¡  ¡ D ]\}}|dkr||7 }qW |S )Nr   )ÚGetNonzeroElementsÚitems)ÚfpÚcountÚkÚvr	   r	   r
   ÚgetNumPositiveCounts3   s
    r   c             C   s6   d}x,|   ¡  ¡ D ]\}}|dk r|t|ƒ7 }qW |S )Nr   )r   r   Úabs)r   r   r   r   r	   r	   r
   ÚgetNumNegativeCounts:   s
    r   c             C   sX   d}g }xF|D ]>}|| d d dkr| | }|dkr|d7 }|  ||f¡ qW ||fS )Nr   é   )Úappend)r   Zbitinfor   ZbitsUnmappedAtomsr   r   r	   r	   r
   Ú getNumPositiveBitCountsOfRadius0A   s    
r   c             C   s0   t  | d ¡}x| dd … D ]}||7 }qW |S )Nr   r   )ÚcopyÚdeepcopy)ZfpsZsummedFPr   r	   r	   r
   Ú	getSumFpsL   s    r   c             C   sB   dd„ | D ƒ}t tƒ}x"t|ƒD ]\}}| |¡||< q W ||fS )Nc             S   s   g | ]}t  |¡‘qS r	   )r   ZMolToSmiles)Ú.0Zmolr	   r	   r
   ú
<listcomp>S   s    z#uniqueMolecules.<locals>.<listcomp>)r   ÚintÚ	enumerateÚindex)ZmolsZsmilesÚuniqueMoleculesÚnZsmir	   r	   r
   r!   R   s
    r!   )Zrdkitr   Z
rdkit.Chemr   Úcollectionsr   r   r   r   r   r   r   r   r!   r	   r	   r	   r
   Ú<module>"   s   