
    DUf2                     h   d dl Z d dlZd dlmZmZ d dlZd dlZddlmZ d Zd Z	ej
                            e          Z G d de j                  Z G d	 d
e j                  Z G d de          Z G d de          Zd Zd Zd Zedk    r" e j                      ej        d           dS dS )    N)IntervalIntervalFile   )test_tempdirc                      t           j                            t                    st          j        dt          z             t          j        t                     d S )Nzmkdir -p %s)ospathexistsr   system
pybedtoolsset_tempdir     [/var/www/html/software/conda/lib/python3.11/site-packages/pybedtools/test/test_cbedtools.pysetup_moduler   
   sD    7>>,'' 0
	-,.///<(((((r   c                      t           j                            t                    rt          j        dt          z             t          j                     d S )Nzrm -r %s)r   r	   r
   r   r   r   cleanupr   r   r   teardown_moduler      sB    	w~~l## -
	*|+,,,r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )IntervalFileTestzdata/rmsk.hg18.chr21.small.bedc                     t           j                            t          | j                  | _        t          | j                  | _        d S N)r   r	   joinPATHfiler   bedselfs    r   setUpzIntervalFileTest.setUp   s0    GLLty11		**r   c                 $   |                      | j        j        dk    | j        j        | j        f           t          j                            t          d          }t          |          }|                      |j        dk    |j        |f           d S )Nr   z
data/c.gffgff)	
assertTruer   	file_typer   r   r	   r   r   r   )r   r!   is      r   testFileTypezIntervalFileTest.testFileType   sv    *e3dh6H$)5TUUUgll4..u,q{C.@AAAAAr   c                     t          ddd          }| j                            |          }|                     t	          |          d           |D ]+}|                     |j        dk    o
|j        dk               ,d S )Nchr21O     )r   r   all_hitsassertEquallenr"   startendr   r$   hitshits       r   testOverlapszIntervalFileTest.testOverlaps&   s    Wgw//x  ##TA&&& 	I 	ICOOCI0GSW5GHHHH	I 	Ir   c                 J   t          dddd          }| j                            |d          }|D ] }|                     |j        dk               !t          dddd          }| j                            |d          }|D ] }|                     |j        dk               !d S )Nr'   r(   r)   +Tsame_strand-)r   r   r+   r"   strandr0   s       r   testStrandszIntervalFileTest.testStrands-   s    Wgw44x   55 	/ 	/COOCJ#-....Wgw44x   55 	/ 	/COOCJ#-....	/ 	/r   c                    t          ddd          }t          ddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          ddd          }t          ddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          dddd          }t          dddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          ddd          }t          ddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          ddd          }t          ddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          ddd          }t          ddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          ddd          }t          dd	d          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          dd	d          }t          ddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          d
dd          }t          ddd          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k                |                     ||k               t          ddd          }t          ddd          }|                     t          |j        |           |                     t          |j        |           |                     t          |j        |           |                     t          |j        |           |                     t          |j	        |           |                     t          |j
        |           d S )Nr'   d      r5   r9   r8   i,        noner   2   )r   r"   assertFalseassertRaisesNotImplementedError__eq____ne____le____ge____lt____gt__)r   abs      r   testRichCmpzIntervalFileTest.testRichCmp8   s   
 Wc3''Wc3''Qa   QQQQWc3''Wc3''Qa   QQQQ Wc3s333Wc3s333a   Qa   a   QQ Wc3''Wc3''a   Qa   QQQ Wc3''Wc3''a   QQa   QQ Wc3''Wc3''a   QQa   QQ Wc3''Wc3''a   QQa   AQ Wc3''Wc3''a   Qa   QQA VQ$$Wa%%a   Qa   a   QQ Wc3''Wb#&&-qx;;;-qx;;;-qx;;;-qx;;;-qx;;;-qx;;;;;r   N)	__name__
__module____qualname__r   r   r%   r3   r:   rN   r   r   r   r   r      so        +D+ + +B B BI I I	/ 	/ 	/e< e< e< e< e<r   r   c                   |    e Zd ZdZdZdZdZdZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )IntervalTest!data/rmsk.hg18.chr21.small.bed.gzr   r         c                     t           j                            t          | j                  | _        d\  }}}t          d|||          | _        |||c| _        | _        | _	        d S )N)r(   r)   r8   r'   r>   
r   r	   r   r   r   r   r$   r.   r/   r9   r   r.   r/   r9   s       r   r   zIntervalTest.setUp   sY    GLLty11	2sF'5#f===,13)
DHdkkkr   c                     |                      | j        | j        z
  | j        j                   |                      t          | j                  | j        j                   d S r   )r,   r/   r.   r$   lengthr-   r   s    r   testLengthszIntervalTest.testLengths   sM    DJ.>>>TVdfm44444r   c                     |                      | j        | j        j                   |                      | j        | j        j                   d S r   )r,   r/   r$   r.   r   s    r   testEndszIntervalTest.testEnds   s@    46:...TV\22222r   c                 P    |                      | j        | j        j                   d S r   )r,   r9   r$   r   s    r   
testStrandzIntervalTest.testStrand   s$    dfm44444r   c                 z   t          | j                  }t          |          }|                     || j                                     d                     |                     || j                                                            |                     || j                                                            dS )/getitem now supports direct access to the line.chrN)r   r   nextr"   chrpos
startswithstartposisdigitr   ivfivs      r   testGetItemzIntervalTest.testGetItem   s    49%%#YY4;22599:::4=)11334444=)113344444r   c                    t          | j                  }t          |          }|                     || j         | j        z                                d          || j         | j        z                       |                     || j         | j        z                                            || j         | j        z                       |                     || j         | j	        z                                                       dS )z!test negative indexes to feature.rc   N)
r   r   rd   r"   
fieldcountre   rf   rg   rh   stopposri   s      r   testGetItemNegativez IntervalTest.testGetItemNegative   s    49%%#YY$+-.99%@@$+-.	
 	
 	
 	$-/088::$-/0	
 	
 	
 	DO+dl:;CCEEFFFFFr   c                    t          | j                  }t          |          }|| j        | j        dz            \  }|| j        | j        dz            \  }}|                     |                                           |                     t          |          |j
                   |                     ||j                   dS )rb   r   N)r   r   rd   re   rg   ro   r"   rh   r,   intr/   chrom)r   rj   rk   seqidr.   r/   s         r   testGetItemSlicezIntervalTest.testGetItemSlice   s    49%%#YYDK$+/12q(889
s(((S26***)))))r   c                    t          | j                  }t          |          |                     t	          dd                   d           |                     t	          dd                   d           |                     t	          dd                   | j        dz
  dd                    t          t	          j                  j                   |                     t          fd| j        dz              dS )z test support for funky slices.N   r   rU   c                     |          S r   r   )xrk   s    r   <lambda>z3IntervalTest.testGetItemSliceNone.<locals>.<lambda>   s    1 r   r   )
r   r   rd   r,   r-   rn   printfieldsrD   
IndexErrorri   s     @r   testGetItemSliceNonez!IntervalTest.testGetItemSliceNone   s    49%%#YYRVa(((R!Wq)))RVdo&92abb6BBBc")nnbi(((*oooot7JKKKKKr   c                    t          | j                  }t          |          }|                     |d         |j                   |                     |d         |j                   |                     |d         |j                   d S )Nrs   r.   r/   )r   r   rd   r,   rs   r.   r/   ri   s      r   testGetItemStringzIntervalTest.testGetItemString   sv    49%%#YYGbh///Gbh///EBF+++++r   c                     t          | j                  }t          |          }d|d<   |                     |d         d           |                     |j        d           d S )Nfakers   )r   r   rd   r,   rs   ri   s      r   testSetItemStringzIntervalTest.testSetItemString   s]    49%%#YY7Gf---6*****r   c                     t          | j                  }t          |          }d|_        t	          |j                   |                     |d         d           |                     |j        d           d S )Nchrfakers   )r   r   rd   rs   r{   r|   r,   ri   s      r   testSetItemzIntervalTest.testSetItem   sk    49%%#YYbiGi0009-----r   c                    t          | j                  }t          |          }|j        dk    r-d|j        d<   |                     t          t          |           d S d|j        d<   d|j        d<   |                     t          |j                  |d                    | 	                    d	|d         v            | 	                    d
|d         v            d S )Nr!   rM   rL   r   IDasdffield0r*   zfield0=asdfzID=fake)
r   r   rd   r#   attrsrD   
ValueErrorstrr,   r"   ri   s      r   testSetAttrszIntervalTest.testSetAttrs   s    49%%#YY<5  BHSMj#r222F#RX1...A.///	RU*+++++r   c                     t          | j                  }t          |          }t          |j                   |                    d           t          |           |                     |d         d           d S )Nr   )r   r   rd   r{   r|   appendr,   ri   s      r   
testAppendzIntervalTest.testAppend  si    49%%#YYbi
		&b			B(((((r   c                     t          | j                  }t          |          }d|_        |                     |j        d           |j        dk    r$|                     d|j        d         v            d S d S )Nzbart simpsonr!   bartr*   )r   r   rd   namer,   r#   r"   r|   ri   s      r   testNamezIntervalTest.testName  ss    49%%#YY .111<5  OOFbil233333 ! r   c                    t          | j                  }t          |          }t          |          }|j        }||_        t          |          }|j        }||_        t          dd|z  |           t          dd|z  |           t          dd|j        z  t          |                     |                     ||cxk    o
|j        k    nc            |                     ||cxk    ot          |          k    nc            d S )N   orig:
(start=%s) second:current:)r   r   rd   r   r.   r{   r"   r   rj   rk   orig_string
orig_startsecond_stringsecond_starts          r   	testStartzIntervalTest.testStart  s   49%%#YY"ggX
Bxj,3[AAAj,5}EEEj,13r77;;;
l>>>>bh>>>>???}????B????@@@@@r   N)rO   rP   rQ   r   re   rg   ro   rn   r   r\   r^   r`   rl   rp   ru   r~   r   r   r   r   r   r   r   r   r   r   rS   rS      s       .DFHGJ? ? ?5 5 53 3 35 5 55 5 5G G G	* 	* 	*	L 	L 	L, , ,+ + +. . ., , ,) ) )4 4 4A A A A Ar   rS   c                       e Zd ZdZdS )IntervalFileGzTestrT   N)rO   rP   rQ   r   r   r   r   r   r   (  s        .DDDr   r   c                   .    e Zd ZdZdZdZdZdZd Zd Z	dS )	IntervalFileGFFTestz
data/d.gffr   rw      	   c                     t           j                            t          | j                  | _        d\  }}}t          d|||          | _        |||c| _        | _        | _	        d S )N)r   r<   r5   chr1r>   rX   rY   s       r   r   zIntervalFileGFFTest.setUp3  sY    GLLty11	(sF&%V<<<,13)
DHdkkkr   c                    t          | j                  }t          |          }t          |          }|j        }||_        |j        t          |j        d                   dz
  k    sJ t          |          }|j        }||_        |j        t          |j        d                   dz
  k    sJ t          dd|z  |           t          dd|z  |           t          dd|j        z  t          |                     |                     ||cxk    o
|j        k    nc            |                     ||cxk    ot          |          k    nc            d S )Nrw   r   r   r   r   r   )	r   r   rd   r   r.   rr   r|   r{   r"   r   s          r   r   zIntervalFileGFFTest.testStart:  sY   49%%#YY"gg X
  x3ry|,,q00000Bx x3ry|,,q00000j,3[AAAj,5}EEEj,13r77;;;
l>>>>bh>>>>???}????B????@@@@@r   N)
rO   rP   rQ   r   re   rg   ro   rn   r   r   r   r   r   r   r   ,  sP        DFHGJ? ? ?A A A A Ar   r   c                     t          dddddd          } t          dddddd          }t          j        d	d
          j        }t	          |                    |                     dk    sJ |                    |                       t	          |                    |                    dk    sJ t	          |                    | d                    dk    sJ t	          |                    |d                    dk    sJ t	          |                    | d
                    dk    sJ t	          |                    |d
                    dk    sJ |                    |           dk    sJ |                    |          dk    sJ |                    | d
          dk    sJ |                    | d          dk    sJ |                    |d
          dk    sJ |                    |d          dk    sJ t          ddd          }t	          |                    |                    dk    sJ t	          |                    |d
                    dk    sJ t          j        dd
          }t          d |j        D                        |j                            t          ddd                    }t	          |          dk    s
J |            d S )NchrAr   
   .0r5   )rs   r.   r/   r   scorer9   r8   zchrA 2 2 . 0 +Tfrom_stringFr6   r   i  i'  )rs   r.   r/   zchr1 3 3c                 ,    g | ]}t          |          S r   )r-   ).0r$   s     r   
<listcomp>z/test_zero_length_regression.<locals>.<listcomp>o  s    
'
'
'a3q66
'
'
'r   r   rw   )r   r   BedTool	intervalsr-   r+   any_hitsr{   )r$   iminusmi2rL   results         r   test_zero_length_regressionr   W  s   vQBSCPPPAF!#SQTUUUF+>>>HAqzz!}}"""AJJqMM"""qzz&!!""a''''qzz!z//00A5555qzz&ez4455::::qzz!z..//14444qzz&dz33449999::a==A::f""""::aT:**a////::aU:++q0000::f$://14444::f%:00A5555	ct	4	4	4Bqzz"~~!####qzz"$z//00A5555:4888A	
'
'1;
'
'
'((([!!(61a"8"899Fv;;!Vr   c                      d                                 } t          j        | d          j        }|                    t          ddd                    }t          |          dk    sJ t          |                      d S )Nzchr1    1       1       Region_A        2       +
chr1    2       2       Region_B        1       +
chr1    3       3       Region_C        3       +
chr1    4       5
Tr   r   rw   r   )stripr   r   r   r+   r   r-   )r   rM   r   s      r   test_issue_123r   t  sy    
 
EGG  	3D111;AZZA..//Fv;;!S[[r   c                  H   t          j        dd                              d          t          t	                              } t          j        j                   ddlm	} fd}t          j        |          5   |             ddd           dS # 1 swxY w Y   dS )	z_
    previously this would crash the interpreter due to an exit(1) call in
    bedFile.cpp
    z	chrA 1 10Tr   %this_file_should_raise_BEDTools_Errorr   )BedToolsFileErrorc                  @    t          t                                d S r   )listiter)rL   s   r   crashesz#test_missing_files.<locals>.crashes  s    T!WWr   N)r   r   saveasr   r   r   unlinkfnpybedtools.cbedtoolsr   pytestraises)r   r   r   rL   s      @r   test_missing_filesr     s    
 	;D999@@/	 	A $q'']]FIadOOO666666     
(	)	)  			                 s   ?BBB__main__T)
remove_all)unittestr   r   r   r   r   tfuncsr   r   r   r	   dirname__file__r   TestCaser   rS   r   r   r   r   r   rO   mainr   r   r   r   <module>r      s    				 - - - - - - - -                 ) ) )  
 
wx  E< E< E< E< E<x( E< E< E<PEA EA EA EA EA8$ EA EA EAP/ / / / /) / / /(A (A (A (A (A, (A (A (AV$ $ $:) ) )  & zHMOOOJ$'''''' r   