B
    3Rc^                 @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ G dd deZ	G dd de
Zi adadadadd
dZdd Zdd ZdS )    N)Chem)RDConfig)StringIOc               @   s>   e Zd ZdZdZdZdZdZdZdZ	dZ
dddZdd ZdS )FGHierarchyNodeN c             C   s8   || _ || _|rt|| _|| _|| _g | _|| _d S )N)	namepatternweakrefrefparentlabelsmartschildren	rxnSmarts)selfr   pattr   r   r   r    r   :lib/python3.7/site-packages/rdkit/Chem/FunctionalGroups.py__init__4   s    zFGHierarchyNode.__init__c             C   s$   d}x| j D ]}|t|7 }qW |S )N   )r   len)r   reschildr   r   r   __len__>   s    zFGHierarchyNode.__len__)r   r   r   N)__name__
__module____qualname__r   r   r   r   r   r   r   ZremovalReactionr   r   r   r   r   r   r   *   s   

r   c               @   s   e Zd ZdS )FuncGroupFileParseErrorN)r   r   r   r   r   r   r   r   E   s   r   Fc          	   C   s$  |s,t r,|r|tkr,| r | tkr,t d d  S |atd}| sR|sRtjtj	d} | rft
| d}| an|rtt|}ntdi ag }xt| dD ]x\}}| }|dd }|sq||}t|dk rtd	|t|f |d  }	|	tkrtd
| |	d}
t|
dkrxJtt|
d D ]6}d|
d |d  }|tkr2td||f q2W td|
d d  }nd }|d }t|}|std||f |d  }d}t|dkr|d }t||||	||d}|r|j| n
|| |t|	< qW |d d  a |S )Nz	+zFunctional_Group_Hierarchy.txtrzneed data or filenamer   z//r      z&Input line %d (%s) is not long enough.zDuplicate label on line %d..z(Hierarchy member %s (line %d) not found.z*Smarts "%s" (line %d) could not be parsed.   r   )r   r   r   r   )	hierarchylastDatalastFilenamerecompileospathjoinr   Z	RDDataDiropenr   
ValueError
groupDefns	enumerate	readlinesstripsplitr   r   reprranger   ZMolFromSmartsr   r   append)ZfileNmdataZforceZsplitterZinFr   ZlineNolineZsplitLr   ZlabelHierarchyiZtmpr   r   r   r   r   noder   r   r   BuildFuncGroupHierarchyO   sj    








r9   c       	      C   s   |  |j}d}i }x,|D ]$}|d |kr|d7 }d||d < qW |rv|||< |d7 }x*|jD ]}t| |||}q^W n|t|7 }|S )Nr   r   )ZGetSubstructMatchesr   r   _SetNodeBitsr   )	molr8   r   idxZmscountseenmr   r   r   r   r:      s    
r:   c             C   sL   d}x|D ]}|t |7 }q
W dg| }d}x|D ]}t| |||}q2W |S )Nr   )r   r:   )r;   r#   ZtotLentryr   r<   r   r   r   CreateMolFingerprint   s    


rA   )NNF)r(   r&   r	   Zrdkitr   r   ior   objectr   r,   r   r-   r#   r$   r%   r9   r:   rA   r   r   r   r   <module>!   s   
B