B
    ž3RcfU  ã               @   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ZG dd„ de jƒZe	dkrZe  
¡  dS )é    N)ÚRDConfig)Ú	DbConnectc               @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCasec             C   sN  t  tjddddf¡}| ¡ }|  |¡ d }|  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ t
dƒ}|jd	d
d}|  |d d dk¡ t
dƒ}|jdd
d}|  |d d dk¡ t
dƒ}|jdd
d}|  |d d dk¡ t
dƒ}|jdd
d}|  |d d dk¡ t  tjdddddf¡}| ¡ }|  |¡ d }|  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ t
dƒ}|jd	d
d}|  |d d dk¡ t
dƒ}|jdd
d}|  |d d dk¡ t
dƒ}|jdd
d}|  |d d dk¡ t
dƒ}|jdd
d}|  |d d dk¡ d S )NzCreateDb.pyz--dbDir=testData/bzrz--molFormat=smilesztestData/bzr.smiztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltÚ	moleculeszcount(*))Úfieldsr   é
   Ú	atompairsÚdescriptors_v1Úrdkitfpsz--molFormat=sdfz--doGobbi2DztestData/bzr.sdfé£   )Ú
subprocessÚPopenÚsysÚ
executableÚwaitÚassertFalseÚ
assertTrueÚosÚpathÚexistsr   ÚGetData)ÚselfÚpÚresÚconnÚd© r   ú'share/RDKit/Projects/DbCLI/TestDbCLI.pyÚtest1Create   sT    


zTestCase.test1Createc          	   C   sx  |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ t tjddddd	d
f¡}| ¡ }|  	|¡ d }|   tj d¡¡ t
ddƒ}| ¡ }W d Q R X |   t|ƒdk¡ dd„ |D ƒ}x |D ]˜}|d }d}i }	d}
xX|t|ƒk r>||d  |	|| < |   t||d  ƒ|
k¡ t||d  ƒ}
|d7 }qèW |   ||	k¡ |   |	| dk|	| ¡ qÎW t d¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzSearchDb.pyz--dbDir=testData/bzrz--molFormat=sdfz--topN=5z--outF=testData/bzr/search.outztestData/bzr.sdfztestData/bzr/search.outÚrr   c             S   s   g | ]}|  ¡  d ¡‘qS )ú,)ÚstripÚsplit)Ú.0Úxr   r   r   ú
<listcomp>V   s    z-TestCase.test2_1SearchFPs.<locals>.<listcomp>r   é   g      ð?é   z1.000)r   r   r   r   r   r   r   r   r   r   ÚopenÚ	readlinesÚlenÚfloatÚunlink)r   r   r   ÚinFÚlinesÚsplitLsÚlineÚlblÚiÚnbrsÚlastValr   r   r   Útest2_1SearchFPsE   s6    

zTestCase.test2_1SearchFPsc          
   C   st  |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ t tjddddd	d
df¡}| ¡ }|  	|¡ d }|   tj d¡¡ t
ddƒ}| ¡ }W d Q R X |   t|ƒdk¡ dd„ |D ƒ}xš|D ]’}|d }d}i }	d}
xX|t|ƒk r@||d  |	|| < |   t||d  ƒ|
k¡ t||d  ƒ}
|d7 }qêW |   ||	k¡ |   |	| dk¡ qÐW t d¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzSearchDb.pyz--dbDir=testData/bzrz--molFormat=sdfz--topN=5z--outF=testData/bzr/search.outz--similarityType=AtomPairsztestData/bzr.sdfztestData/bzr/search.outr   r   c             S   s   g | ]}|  ¡  d ¡‘qS )r    )r!   r"   )r#   r$   r   r   r   r%   w   s    z3TestCase.test2_2SearchAtomPairs.<locals>.<listcomp>r   r&   g      ð?r'   z1.000)r   r   r   r   r   r   r   r   r   r   r(   r)   r*   r+   r,   )r   r   r   r-   r.   r/   r0   r1   r2   r3   r4   r   r   r   Útest2_2SearchAtomPairse   s8    

zTestCase.test2_2SearchAtomPairsc          
   C   st  |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ t tjddddd	d
df¡}| ¡ }|  	|¡ d }|   tj d¡¡ t
ddƒ}| ¡ }W d Q R X |   t|ƒdk¡ dd„ |D ƒ}xš|D ]’}|d }d}i }	d}
xX|t|ƒk r@||d  |	|| < |   t||d  ƒ|
k¡ t||d  ƒ}
|d7 }qêW |   ||	k¡ |   |	| dk¡ qÐW t d¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzSearchDb.pyz--dbDir=testData/bzrz--molFormat=sdfz--topN=5z--outF=testData/bzr/search.outz$--similarityType=TopologicalTorsionsztestData/bzr.sdfztestData/bzr/search.outr   r   c             S   s   g | ]}|  ¡  d ¡‘qS )r    )r!   r"   )r#   r$   r   r   r   r%   —   s    z2TestCase.test2_3SearchTorsions.<locals>.<listcomp>r   r&   g      ð?r'   z1.000)r   r   r   r   r   r   r   r   r   r   r(   r)   r*   r+   r,   )r   r   r   r-   r.   r/   r0   r1   r2   r3   r4   r   r   r   Útest2_3SearchTorsions†   s8    


zTestCase.test2_3SearchTorsionsc          	   C   s<  |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ t tjddddf¡}| ¡ }|  	|¡ d }|   tj d	¡¡ t
d	d
ƒ}| ¡ }W d Q R X |   t|ƒdk¡ t d	¡ t tjddddf¡}| ¡ }|  	|¡ d }|   tj d	¡¡ t
d	d
ƒ}| ¡ }W d Q R X |   t|ƒdk¡ t d	¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzSearchDb.pyz--dbDir=testData/bzrz--outF=testData/bzr/search.outz--query=activity<6.5ztestData/bzr/search.outr   é   )r   r   r   r   r   r   r   r   r   r   r(   r)   r*   r,   )r   r   r   r-   r.   r   r   r   Útest2_4SearchProps¦   s0    




zTestCase.test2_4SearchPropsc          	   C   s¨  t  tjddddf¡}| ¡ }|  |¡ d }|  tj 	d¡¡ t
ddƒ}| ¡ }W d Q R X |  t|ƒd¡ t d¡ tj 	d¡rœt  tjddd	d
df¡}nt  tjdddd
df¡}| ¡ }|  |¡ d }|  tj 	d¡¡ t
ddƒ}| ¡ }W d Q R X |  t|ƒd¡ t d¡ tj 	d¡r,t d¡ t  tjdddddf¡}| ¡ }|  |¡ d }|  tj 	d¡¡ t
ddƒ}| ¡ }W d Q R X |  t|ƒd¡ t d¡ d S )NzSearchDb.pyz--dbDir=testData/bzrz--outF=testData/bzr/search.outz--smarts=cncnccztestData/bzr/search.outr   é1   z	/dev/nullz--outF=/dev/nullz#--smilesOut=testData/bzr/search.outz--outF=testData/crud.outztestData/crud.outz--negateér   )r   r   r   r   r   r   r   r   r   r   r(   r)   ÚassertEqualr*   r,   )r   r   r   r-   r.   r   r   r   Útest2_5SearchSmartsÆ   sd    






zTestCase.test2_5SearchSmartsc          	   C   sö   t  tjdddddf¡}| ¡ }|  |¡ d }|  tj 	d¡¡ t
ddƒ}| ¡ }W d Q R X |  t|ƒd¡ t d¡ t  tjdddddd	f¡}| ¡ }|  |¡ d }|  tj 	d¡¡ t
ddƒ}| ¡ }W d Q R X |  t|ƒd
¡ t d¡ d S )NzSearchDb.pyz--dbDir=testData/bzrz--outF=testData/bzr/search.outz--query=activity<6.5z--smarts=cncnccztestData/bzr/search.outr   é   z--negateé   )r   r   r   r   r   r   r   r   r   r   r(   r)   r<   r*   r,   )r   r   r   r-   r.   r   r   r   Útest2_6SearchBoth  s,    





zTestCase.test2_6SearchBothc          
   C   s°  |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ t tjddddd	d
df¡}| ¡ }|  	|¡ d }|   tj d¡¡ t
ddƒ}| ¡ }W d Q R X |   t|ƒdk¡ dd„ |D ƒ}xš|D ]’}|d }d}i }	d}
xX|t|ƒk r@||d  |	|| < |   t||d  ƒ|
k¡ t||d  ƒ}
|d7 }qêW |   ||	k¡ |   |	| dk¡ qÐW |  |d d d¡ |  |d d d¡ |  |d d d¡ t d¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzSearchDb.pyz--dbDir=testData/bzrz--molFormat=sdfz--topN=5z--outF=testData/bzr/search.outz--similarityType=Gobbi2DztestData/bzr.sdfztestData/bzr/search.outr   r   c             S   s   g | ]}|  ¡  d ¡‘qS )r    )r!   r"   )r#   r$   r   r   r   r%   0  s    z/TestCase.test2_7SearchGobbi.<locals>.<listcomp>r   r&   g      ð?r'   z1.000Z
Adinazolamé   zalpha-hydroxytriazolamé   z0.631)r   r   r   r   r   r   r   r   r   r   r(   r)   r*   r+   r<   r,   )r   r   r   r-   r.   r/   r0   r1   r2   r3   r4   r   r   r   Útest2_7SearchGobbi  s>    

zTestCase.test2_7SearchGobbic          	   C   s  |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ |   tj d¡¡ t tjddddd	d
f¡}| ¡ }|  	|¡ d }|   tj d¡¡ t
ddƒ}| ¡ }W d Q R X |   t|ƒdk¡ |d  ¡  d¡}| d¡ x6tdt|ƒdƒD ]"}t||d  ƒ}|   |dk¡ qèW t d¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzSearchDb.pyz--dbDir=testData/bzrz--molFormat=sdfz--simThresh=0.7z--outF=testData/bzr/search.outztestData/bzr_q1.molztestData/bzr/search.outr   r&   r   r    r'   gffffffæ?)r   r   r   r   r   r   r   r   r   r   r(   r)   r*   r!   r"   ÚpopÚranger+   r,   )r   r   r   r-   r.   ZsplitLr2   Úvr   r   r   Útest2_8SearchThreshB  s(    


zTestCase.test2_8SearchThreshc             C   s  t j d¡rt  d¡ t j d¡r,t  d¡ t j d¡rBt  d¡ t j d¡rXt  d¡ t tjddddd	d
f¡}| ¡ }|  	|¡ d }|  
t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ tdƒ}|jddd}|  |d d d¡ |jddd}|  t|ƒd¡ dd„ | ¡ D ƒ}|  	d|k¡ d }d }t j d¡rXt  d¡ t j d¡rpt  d¡ t j d¡rˆt  d¡ t j d¡r t  d¡ t tjdddd	dddddd
f¡}| ¡ }|  	|¡ d }|  
t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ tdƒ}|jddd}|  
|d d dk¡ |jddd}|  
t|ƒdk¡ dd„ | ¡ D ƒ}|  	d|k¡ d }| ¡  d }t tjdddddddddd
f¡}| ¡ }|  	|¡ d }|  
t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ tdƒ}|jddd}|  |d d d¡ |jddd}|  t|ƒd¡ dd„ | ¡ D ƒ}|  
d|k¡ d }| ¡  d }t tjdddddddddd
f¡}| ¡ }|  	|¡ d }|  
t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ tdƒ}|jddd}|  |d d d¡ |jddd}|  t|ƒd¡ dd„ | ¡ D ƒ}|  
d|k¡ d }| ¡  d }t tjdddddddd
f	¡}| ¡ }|  	|¡ d }|  
t j d¡¡ |  	t j d¡¡ |  	t j d¡¡ |  
t j d¡¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzCreateDb.pyz--dbDir=testData/bzrz--molFormat=smilesz
--noExtrasz
--noSmilesztestData/bzr.smir   zcount(*))r   r   r   Ú*c             S   s   g | ]}|  ¡ ‘qS r   )Úlower)r#   r$   r   r   r   r%   u  s    z/TestCase.test4CreateOptions.<locals>.<listcomp>Zsmilesz--noFingerprintsz--noLayeredFpsz--noMorganFpsz	--noPairsz--noDescriptorsc             S   s   g | ]}|  ¡ ‘qS r   )rI   )r#   r$   r   r   r   r%   •  s    z	--noPropsc             S   s   g | ]}|  ¡ ‘qS r   )rI   )r#   r$   r   r   r   r%   ¬  s    z--maxRowsCached=4c             S   s   g | ]}|  ¡ ‘qS r   )rI   )r#   r$   r   r   r   r%   Ã  s    )r   r   r   r,   r   r   r   r   r   r   r   r   r   r<   r*   ZGetColumnNamesÚ
KillCursor)r   r   r   r   r   Zcnsr   r   r   Útest4CreateOptions[  sÐ    












zTestCase.test4CreateOptionsc             C   sÐ  t j d¡rt  d¡ t j d¡r,t  d¡ t j d¡rBt  d¡ t j d¡rXt  d¡ t tjddddd	f¡}| ¡ }|  	|¡ d }t
dƒ}| ¡ }| d
¡ t tjdddddddd	f	¡}| ¡ }|  	|¡ d }|  t j d¡¡ tddƒ}| ¡ }W d Q R X |  t|ƒd¡ dd„ |D ƒ}xž|D ]–}|d }	d}
i }d}xZ|
t|ƒk rš||
d  |||
 < |  t||
d  ƒ|k¡ t||
d  ƒ}|
d7 }
qBW |  |	|k¡ |  ||	 dk¡ q(W t  d¡ d S )NztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltzCreateDb.pyz--dbDir=testData/bzrz--noFingerprintsz--noDescriptorsztestData/bzr.sdfzJcreate table tmp as select compound_id,atompairfp,torsionfp from atompairszSearchDb.pyz--molFormat=sdfz--topN=5z--outF=testData/bzr/search.outz--similarityType=AtomPairsz--pairTableName=tmpztestData/bzr/search.outr   r   c             S   s   g | ]}|  ¡  d ¡‘qS )r    )r!   r"   )r#   r$   r   r   r   r%   ó  s    z5TestCase.test5TestBackwardsCompat.<locals>.<listcomp>r   r&   g      ð?r'   z1.000)r   r   r   r,   r   r   r   r   r   r   r   Z	GetCursorZexecuter   r(   r)   r<   r*   r+   )r   r   r   r   Zcursr-   r.   r/   r0   r1   r2   r3   r4   r   r   r   Útest5TestBackwardsCompatÕ  sP    








z!TestCase.test5TestBackwardsCompatc             C   sJ  t  tjddddf¡}| ¡ }|  |¡ d }|  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ t
dƒ}|jd	d
d}|  |d d d¡ t
dƒ}|jdd
d}|  |d d d¡ t
dƒ}|jdd
d}|  |d d d¡ t
dƒ}|jdd
d}|  |d d d¡ d }| ¡  t  tjdddddf¡}| ¡ }|  |¡ d }|  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ |  tj 	d¡¡ t
dƒ}|jd	d
d}|  |d d d¡ t
dƒ}|jdd
d}|  |d d d¡ t
dƒ}|jdd
d}|  |d d d¡ t
dƒ}|jdd
d}|  |d d d¡ d S )NzCreateDb.pyz--dbDir=testData/bzrz--molFormat=smilesztestData/bzr.smiztestData/bzr/Compounds.sqltztestData/bzr/AtomPairs.sqltztestData/bzr/Descriptors.sqltztestData/bzr/Fingerprints.sqltr   zcount(*))r   r   r   r   r	   r
   z
--updateDbztestData/bzr.2.smié   )r   r   r   r   r   r   r   r   r   r   r   r   r<   rJ   )r   r   r   r   r   r   r   r   Útest6Update  sX    


zTestCase.test6UpdateN)Ú__name__Ú
__module__Ú__qualname__r   r5   r6   r7   r9   r=   r@   rC   rG   rK   rL   rN   r   r   r   r   r      s   7 !  <#z-r   Ú__main__)Zunittestr   r   Zrdkitr   Zrdkit.Dbase.DbConnectionr   r   r   rO   Úmainr   r   r   r   Ú<module>   s       4