civicpy/civic.py
def search_variants_by_coordinates(coordinate_query, search_mode='any'):
    """
    Search the cache for variants matching provided coordinates using the corresponding search mode.

    :param coordinate_query: A civic CoordinateQuery object
                        start: the genomic start coordinate of the query
                        stop: the genomic end coordinate of the query
                        chr: the GRCh37 chromosome of the query (e.g. "7", "X")
                        alt: the alternate allele at the coordinate [optional]

    :param search_mode: ['any', 'include_smaller', 'include_larger', 'exact']
                        any: any overlap between a query and a variant is a match
                        include_smaller: variants must fit within the coordinates of the query
                        include_larger: variants must encompass the coordinates of the query
                        exact: variants must match coordinates precisely, as well as alternate
                               allele, if provided
                        search_mode is 'exact' by default

    :return:            Returns a list of variant hashes matching the coordinates and search_mode
    """
    get_all_variants()
    ct = COORDINATE_TABLE
    start_idx = COORDINATE_TABLE_START
    stop_idx = COORDINATE_TABLE_STOP
    chr_idx = COORDINATE_TABLE_CHR
    start = int(coordinate_query.start)
    stop = int(coordinate_query.stop)
    chromosome = str(coordinate_query.chr)
    # overlapping = (start <= ct.stop) & (stop >= ct.start)
    left_idx = chr_idx.searchsorted(chromosome)
    right_idx = chr_idx.searchsorted(chromosome, side='right')
    chr_ct_idx = chr_idx[left_idx:right_idx].index
    right_idx = start_idx.searchsorted(stop, side='right')
    start_ct_idx = start_idx[:right_idx].index
    left_idx = stop_idx.searchsorted(start)
    stop_ct_idx = stop_idx[left_idx:].index
    match_idx = chr_ct_idx & start_ct_idx & stop_ct_idx
    m_df = ct.loc[match_idx, ]
    if search_mode == 'any':
        var_digests = m_df.v_hash.to_list()
        return [CACHE[v] for v in var_digests]
    elif search_mode == 'include_smaller':
        match_idx = (start <= m_df.start) & (stop >= m_df.stop)
    elif search_mode == 'include_larger':
        match_idx = (start >= m_df.start) & (stop <= m_df.stop)
    elif search_mode == 'exact':
        match_idx = (start == m_df.stop) & (stop == m_df.start)
        if coordinate_query.alt:
            match_idx = match_idx & (coordinate_query.alt == m_df.alt)
    else:
        raise ValueError("unexpected search mode")
    var_digests = m_df.loc[match_idx,].v_hash.to_list()
    return [CACHE[v] for v in var_digests]
def search_variants_by_coordinates(coordinate_query, search_mode='any'):
    get_all_variants()
    ct = COORDINATE_TABLE
    start_idx = COORDINATE_TABLE_START
    stop_idx = COORDINATE_TABLE_STOP
    chr_idx = COORDINATE_TABLE_CHR
    start = int(coordinate_query.start)
    stop = int(coordinate_query.stop)
    chromosome = str(coordinate_query.chr)
    # overlapping = (start <= ct.stop) & (stop >= ct.start)
    left_idx = chr_idx.searchsorted(chromosome)
    right_idx = chr_idx.searchsorted(chromosome, side='right')
    chr_ct_idx = chr_idx[left_idx:right_idx].index
    right_idx = start_idx.searchsorted(stop, side='right')
    start_ct_idx = start_idx[:right_idx].index
    left_idx = stop_idx.searchsorted(start)
    stop_ct_idx = stop_idx[left_idx:].index
    match_idx = chr_ct_idx & start_ct_idx & stop_ct_idx
    m_df = ct.loc[match_idx, ]
    if search_mode == 'any':
        var_digests = m_df.v_hash.to_list()
        return [CACHE[v] for v in var_digests]
    elif search_mode == 'include_smaller':
        match_idx = (start <= m_df.start) & (stop >= m_df.stop)
    elif search_mode == 'include_larger':
        match_idx = (start >= m_df.start) & (stop <= m_df.stop)
    elif search_mode == 'exact':
        match_idx = (start == m_df.stop) & (stop == m_df.start)
        if coordinate_query.alt:
            match_idx = match_idx & (coordinate_query.alt == m_df.alt)
    else:
        raise ValueError("unexpected search mode")
    var_digests = m_df.loc[match_idx,].v_hash.to_list()
    return [CACHE[v] for v in var_digests]
def search_variants_by_coordinates ( coordinate_query , search_mode = 'any' ) : get_all_variants ( ) ct = COORDINATE_TABLE start_idx = COORDINATE_TABLE_START stop_idx = COORDINATE_TABLE_STOP chr_idx = COORDINATE_TABLE_CHR start = int ( coordinate_query . start ) stop = int ( coordinate_query . stop ) chromosome = str ( coordinate_query . chr ) # overlapping = (start <= ct.stop) & (stop >= ct.start) left_idx = chr_idx . searchsorted ( chromosome ) right_idx = chr_idx . searchsorted ( chromosome , side = 'right' ) chr_ct_idx = chr_idx [ left_idx : right_idx ] . index right_idx = start_idx . searchsorted ( stop , side = 'right' ) start_ct_idx = start_idx [ : right_idx ] . index left_idx = stop_idx . searchsorted ( start ) stop_ct_idx = stop_idx [ left_idx : ] . index match_idx = chr_ct_idx & start_ct_idx & stop_ct_idx m_df = ct . loc [ match_idx , ] if search_mode == 'any' : var_digests = m_df . v_hash . to_list ( ) return [ CACHE [ v ] for v in var_digests ] elif search_mode == 'include_smaller' : match_idx = ( start <= m_df . start ) & ( stop >= m_df . stop ) elif search_mode == 'include_larger' : match_idx = ( start >= m_df . start ) & ( stop <= m_df . stop ) elif search_mode == 'exact' : match_idx = ( start == m_df . stop ) & ( stop == m_df . start ) if coordinate_query . alt : match_idx = match_idx & ( coordinate_query . alt == m_df . alt ) else : raise ValueError ( "unexpected search mode" ) var_digests = m_df . loc [ match_idx , ] . v_hash . to_list ( ) return [ CACHE [ v ] for v in var_digests ]
Search the cache for variants matching provided coordinates using the corresponding search mode.

    :param coordinate_query: A civic CoordinateQuery object
                        start: the genomic start coordinate of the query
                        stop: the genomic end coordinate of the query
                        chr: the GRCh37 chromosome of the query (e.g. "7", "X")
                        alt: the alternate allele at the coordinate [optional]

    :param search_mode: ['any', 'include_smaller', 'include_larger', 'exact']
                        any: any overlap between a query and a variant is a match
                        include_smaller: variants must fit within the coordinates of the query
                        include_larger: variants must encompass the coordinates of the query
                        exact: variants must match coordinates precisely, as well as alternate
                               allele, if provided
                        search_mode is 'exact' by default

    :return:            Returns a list of variant hashes matching the coordinates and search_mode
Search the cache for variants matching provided coordinates using the corresponding search mode .