o
    ,e3                     @   sl   d dl Z d dlZd dlZd dlZd dlZd dlZG dd dZG dd dZG dd dZ	G dd	 d	Z
dS )
    Nc                   @   sx   e Zd 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d ZdS )
TestRemoteNhttp://raw.githubusercontent.com/dpryan79/pyBigWig/master/pyBigWigTest/test.bwc                 C   s   t | j}|d usJ |S )N)pyBigWigopenfnameselfbw r
   1lib/python3.10/site-packages/pyBigWigTest/test.pydoOpen   s   zTestRemote.doOpenc                 C   sH   t | j}| dddksJ W d    d S 1 sw   Y  d S )NcQ?110)r   r   r   chromsr   r
   r
   r   
doOpenWith   s   "zTestRemote.doOpenWithc                 C   s>   |  dddksJ | ddksJ | dd u sJ d S )Nr   r   r   r   c)r   r   r
   r
   r   doChroms   s   zTestRemote.doChromsc              	   C   s$   |  ddddddddksJ d S )	N   i  r              )ZmaxValZsumDataZminValversionZ
sumSquaredZnLevelsZnBasesCovered)headerr   r
   r
   r   doHeader      $zTestRemote.doHeaderc                 C   s   | ddddgksJ |j ddddddgksJ |j ddd	dd
dddgks*J |j dtdtd	dd
dddgks@J | ddgksJJ d S )Nr   r      gUUU?max)type   @33?c      r   r!   nBins   `ff?      ?gq\?)statsnpint64r   r
   r
   r   doStats   s
    ,zTestRemote.doStatsc                 C   sD   | dddg dksJ | dtdtdg dks J d S )Nr   r   r   )   ?   ?r"   )valuesr*   r+   r   r
   r
   r   doValues#   s   *zTestRemote.doValuesc                 C   sN   | ddddksJ | dtdtddksJ | ddks%J d S )Nr   r   r   )r   r   r-   r   r   r.   r   r   r"   )r1   r2   r3   )d      r'   )r5      r(   )	intervalsr*   r+   r   r
   r
   r   doIntervals(   s   "zTestRemote.doIntervalsc                 C   s$   |j ddddddddgksJ d S )	Nr   r4   r6   sumr   r%   g     A@g     @B@)r)   r   r
   r
   r   doSum-   r   zTestRemote.doSumc                 C   sv  t jdd}|j}|  t|d}|d usJ d|dfd|dfg}t| dks1J |j|dd |D ];}|	|d	 }g }g }	g }
g }|D ]}|
|d	  |	
|d	  |

|d  |
|d  qM|j||	|
|d
 q:|  t|}| | ksJ | | ksJ |D ]}|	|d	 }|	|d	 }||ksJ q|  |  t| d S )NFdeletewr   r   r   r   ZmaxZoomsr   endsr/   )tempfileNamedTemporaryFilenamecloser   r   r   len	addHeaderr7   append
addEntriesr   osremove)r   r	   ofileonameZbw2r   r   ZintsZchroms2startsr@   r/   entryZints1Zints2r
   r
   r   doWrite0   s>   
zTestRemote.doWritec           	      C   s  dgd }g d}g d}g d}t jdd}|j}|  t|d}|d	d
g |j|dd |dd |dd |dd d |j|dd |dd |dd |dd d |jd|dd |dd dd |jd|dd |dd dd |jdd|dd ddd |jdd|dd ddd z!|j|dd |dd |dd |dd d ddksJ W n	 ty   Y nw z|jd|dd |dd dd ddksJ W n	 ty   Y nw z|jd|dd |dd dd ddksJ W n
 ty   Y nw z|jdd|dd ddd ddks$J W n
 ty/   Y nw |jdgd |dd |dd |dd d |  t	
t|d  }|dks_J t| dS )z
        Test all three modes of storing entries. Also test to ensure that we get error messages when doing something silly

        This is a modified version of the writing example from libBigWig
        r      )r   r4   }   r$         r   iX  iq  i  i   iR  )   x   ~            )              ?      i@            b@      9@rZ   r[   r\   r]   r^   r_               4r_   r`   ra   r_   Fr;   r=   r   @B 2` r   r   r?   	      )r/   span   i        )r/   ri   stepi     r   3re   rbZ ef104f198c6ce8310acc149d0377fc16N)rA   rB   rC   rD   r   r   rF   rH   RuntimeErrorhashlibmd5read	hexdigestrI   rJ   )	r   r   rM   r@   r/   rK   rL   r	   hr
   r
   r   doWrite2U   sX   
22""2""0zTestRemote.doWrite2c                 C   s   t jdd}|j}|  t|d}|ddg |  tt|d	 
 }|dks0J t|}| dd	d
ks@J |dd ksIJ |dddg ksTJ |jdddddd d gkscJ |  t| d S )NFr;   r=   rb   rd   rp   Z 361c600e5badf0b45d819552a7822937rc   rf   )r   re   r   r   r   )r&   )rA   rB   rC   rD   r   r   rF   rr   rs   rt   ru   r   r7   r/   r)   rI   rJ   )r   rK   rL   r	   rv   r
   r
   r   doWriteEmpty   s   
zTestRemote.doWriteEmptyc                 C   s  t jdd}|j}|  t|d}|g d tdgd dgd  dgd  d	gd  }tjg d
tj	d}tjg dtj	d}tjtj
dtjd}|j||||d |  dd t|||D }t|}| dddddks{J tg dD ]<\}	}
t||
D ]0\}}|d |d|	 |  ksJ |d |d|	 |  ksJ t|d |d|	 |  sJ qq|  t| d S )NFr;   r=   ))chr1r4   )chr2r5   )chr3r$   )chr4   ry   r   rz   r{   r|   )r   
   (   2   <   F   P   Z   Zdtype)rT   rk   -   7   A   K   U   _      r?   c                 S   s   g | ]
\}}}|||fqS r
   r
   ).0xyzr
   r
   r   
<listcomp>   s    z+TestRemote.doWriteNumpy.<locals>.<listcomp>r4   r5   r$   r}   )ry   rz   r{   r|   r   r   )rA   rB   rC   rD   r   r   rF   r*   arrayr+   randomrandom_samplefloat64rH   zipr   	enumerater7   ZiscloserI   rJ   )r   rK   rL   r	   r   rM   r@   values0ZvalsZidx1ZchromZidx2tupr
   r
   r   doWriteNumpy   s,   .
"zTestRemote.doWriteNumpyc                 C   s   |   }| | | jds=| | | | | | | | | | | 	| | 
  |   |   |   |  d S )NZhttp)r   r   r   
startswithr   r,   r:   r0   r8   rO   r   rw   rx   r   rD   r   r
   r
   r   testAll   s   






zTestRemote.testAllN)__name__
__module____qualname__r   r   r   r   r   r,   r0   r8   r:   rO   rw   rx   r   r   r
   r
   r
   r   r      s    %;r   c                   @      e Zd Zdd ZdS )	TestLocalc                 C   s&   t  }tjtjd |_|  d S )Nz/pyBigWigTest/test.bw)r   rI   pathdirnamer   __file__r   r   )r   Zblahr
   r
   r   testFoo   s   zTestLocal.testFooN)r   r   r   r   r
   r
   r
   r   r          r   c                   @   r   )
TestBigBedc                 C   s   t jtjd }t|}|d usJ | dksJ | dks$J d}| }t	|t
r4|d}||ks:J |ddd}g d	}||ksKJ |dtdtd}||ks^J |  d S )
Nz/pyBigWigTest/test.bigBedr   r   a  table RnaElements 
"BED6 + 3 scores for RNA Elements data "
    (
    string chrom;      "Reference sequence chromosome or scaffold"
    uint   chromStart; "Start position in chromosome"
    uint   chromEnd;   "End position in chromosome"
    string name;       "Name of item"
    uint   score;      "Normalized score from 0-1000"
    char[1] strand;    "+ or - or . for unknown"
    float level;       "Expression level such as RPKM or FPKM. Set to -1 for no data."
    float signif;      "Statistical significance such as IDR. Set to -1 for no data."
    uint score2;       "Additional measurement/count e.g. number of reads. Set to 0 for no data."
    )
ASCIIry   i i ))i i( z61035	130	-	0.026	0.42	404)i7͘ iQΘ z61047	136	-	0.029	0.42	404)iΘ is z61048	630	-	5.420	0.00	2672399)rI   r   r   r   r   r   ZisBigWigZisBigBedSQL
isinstancebytesdecodeentriesr*   r+   rD   )r   r   Zbbr   outputoZexpectedr
   r
   r   
testBigBed   s    


zTestBigBed.testBigBedN)r   r   r   r   r
   r
   r
   r   r      r   r   c                   @   s   e Zd Zdd Zdd ZdS )	TestNumpyc                    s  dd l }tjdkrdS dd ltdd  jdgdd dgd }jg djd	}jg d
jd	}jjdj	d	} j
||||d jg djd	}jg djd	}jjdj	d	} j
||||d jg djd	}jjdj	d	} j
d|d|d jg djd	}jjdj	d	} j
d|d|d jjdj	d	}	 j
dddd|	d jjdj	d	}
 j
dddd|
d    td  d us	J  fdd}|d| |d| |d| |d| |d|	 |d|
  jddddd}t|ts?J  jddddd}t|jsQJ    |d d S )Nr   z/tmp/delete.bwr=   )r   i  r>   r   r~   )
r   r~   rh   rl   r   r   r   r   r   r   r   )
rT   rk      #   r   r   r   r   r   r   r?   )
r4   n   rU         r5               )
i   s   rQ                        )
r$      rR   rS      r}   i  i  i  i"  r   )ri   r/   )
,  i6  i@  iJ  iT  i^  ih  ir  i|  i  i  r   )ri   rm   r/   r   c                    sT   g }  d| | d D ]	}||d  q|}|| dk s(J d S )Nr   r4   r   gh㈵>)r7   rG   r   allabs)startZv2vtr	   r*   r
   r   compy!  s
   
 z"TestNumpy.testNumpy.<locals>.compyr4   r$   r   FnumpyT)rI   r   r   r   rF   r   r+   r   r   r   rH   rD   r/   r   listZndarrayrJ   )r   rI   r   rM   r@   r   Zvalues1Zvalues2Zvalues3Zvalues4Zvalues5r   Zfoor
   r   r   	testNumpy   sR   
&&






zTestNumpy.testNumpyc              
   C   s   t jdkrdS dd l}d}t |d}|j|jddddd|j|ddd|jddd	s/J |j|jdddd
ddd|j|dddd
d|jddd	sOJ d S )Nr   r   rr   rh   Tr   r   )Z	equal_nanZmeanrT   )	r   r   r   Zallcloser/   r   Zfloat32r)   r   )r   r*   r   r	   r
   r
   r   testNumpyValues8  s   

zTestNumpy.testNumpyValuesN)r   r   r   r   r   r
   r
   r
   r   r      s    @r   )r   rA   rI   sysrr   r   r*   r   r   r   r   r
   r
   r
   r   <module>   s     J 