# Path: denovoFilter/exclude_segdups.py
# def check_segdups(de_novos):
#     """ identifies de novo calls within segmental duplications.
#     
#     Args:
#         de_novos: dataframe of candidate de novo calls
#     
#     Returns:
#         list of booleans for whether each candidate is not in a segdup region.
#     """
#     
#     segdups = load_segdups()
#     
#     # check if each candidate is not in a segdup region. This uses an interval
#     # tree for efficient searching.
#     statuses = []
#     for i, row in de_novos.iterrows():
#         chrom = row["chrom"]
#         pos = row["pos"]
#         
#         status = len(segdups[chrom].search(pos)) == 0
#         statuses.append(status)
#     
#     return statuses


import unittest
from pandas import DataFrame, Series
from denovoFilter.exclude_segdups import check_segdups
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
'''




class TestExcludeSegdups(unittest.TestCase):
    
    def test_exclude_segdups(self):
        ''' check that counting alleles from DP4 entries works correctly
        '''
        
        # define variants that lie around the boundaries of a segdup region
        variants = DataFrame({'person_stable_id': ['a', 'a', 'a', 'a', 'a', 'a'],
            'chrom': ['1', '1', '1', '1', '1', '1'],
            'pos': [1379893, 1379895, 1379894, 1384309, 1384310, 1384311],
            'ref': ['A', 'G', 'A', 'G', 'A', 'G'],
            'alt': ['C', 'T', 'C', 'T', 'C', 'T'],
            'symbol': ['TEST1', 'TEST1', 'TEST1', 'TEST1', 'TEST1', 'TEST1'],
            })
        
        expected = [True, False, False, False, False, True]
        

# Path: denovoFilter/exclude_segdups.py
# def check_segdups(de_novos):
#     """ identifies de novo calls within segmental duplications.
#     
#     Args:
#         de_novos: dataframe of candidate de novo calls
#     
#     Returns:
#         list of booleans for whether each candidate is not in a segdup region.
#     """
#     
#     segdups = load_segdups()
#     
#     # check if each candidate is not in a segdup region. This uses an interval
#     # tree for efficient searching.
#     statuses = []
#     for i, row in de_novos.iterrows():
#         chrom = row["chrom"]
#         pos = row["pos"]
#         
#         status = len(segdups[chrom].search(pos)) == 0
#         statuses.append(status)
#     
#     return statuses


# Path: tests/test_exclude_segdups.py
import unittest
from pandas import DataFrame, Series
from denovoFilter.exclude_segdups import check_segdups

copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
'''




class TestExcludeSegdups(unittest.TestCase):
    
    def test_exclude_segdups(self):
        ''' check that counting alleles from DP4 entries works correctly
        '''
        
        # define variants that lie around the boundaries of a segdup region
        variants = DataFrame({'person_stable_id': ['a', 'a', 'a', 'a', 'a', 'a'],
            'chrom': ['1', '1', '1', '1', '1', '1'],
            'pos': [1379893, 1379895, 1379894, 1384309, 1384310, 1384311],
            'ref': ['A', 'G', 'A', 'G', 'A', 'G'],
            'alt': ['C', 'T', 'C', 'T', 'C', 'T'],
            'symbol': ['TEST1', 'TEST1', 'TEST1', 'TEST1', 'TEST1', 'TEST1'],
            })
        
        expected = [True, False, False, False, False, True]
        

        self.assertEqual(check_segdups(variants), expected)