Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

All recognized serology are valid. #306

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions pyard/ard.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@
from collections import Counter
from typing import Iterable, List, Union

from . import broad_splits, smart_sort
import pyard.serology
from . import data_repository as dr
from . import db
from . import smart_sort
from .serology import SerologyMapping
from .constants import (
HLA_regex,
VALID_REDUCTION_TYPES,
Expand Down Expand Up @@ -112,17 +114,17 @@ def __init__(
self.db_connection, self.code_mappings.who_group
)

# Load Serology mappings
# Load Serology mappings (Broad/Splits, Associated, Recognized)
broad_splits_mapping, associated_mapping = dr.generate_broad_splits_mapping(
self.db_connection, imgt_version
)
self.serology_mapping = broad_splits.SerologyMapping(
self.serology_mapping = SerologyMapping(
broad_splits_mapping, associated_mapping
)

dr.generate_serology_mapping(
self.db_connection, imgt_version, self.serology_mapping, self._redux_allele
)
self.valid_serology_set = dr.build_valid_serology_set(self.db_connection)

# Load V2 to V3 mappings
dr.generate_v2_to_v3_mapping(self.db_connection, imgt_version)
Expand Down Expand Up @@ -411,7 +413,11 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPES) -> str:
# Handle Serology
if self._config["reduce_serology"] and self.is_serology(glstring):
alleles = self._get_alleles_from_serology(glstring)
return self.redux("/".join(alleles), redux_type)
# If there's corresponding alleles, return / delimited alleles
if alleles:
return self.redux("/".join(alleles), redux_type)
# If there's no DNA Mapping for a serology, e.g. DPw6, return empty
return ""

if ":" in glstring:
loc_allele = glstring.split(":")
Expand Down Expand Up @@ -498,7 +504,7 @@ def is_serology(self, allele: str) -> bool:
if "*" in allele or ":" in allele:
return False

return db.is_valid_serology(self.db_connection, allele)
return allele in self.valid_serology_set

@functools.lru_cache(maxsize=DEFAULT_CACHE_SIZE)
def is_mac(self, allele: str) -> bool:
Expand Down Expand Up @@ -651,7 +657,7 @@ def _get_alleles(self, code, locus_antigen) -> Iterable[str]:

def _get_alleles_from_serology(self, serology) -> Iterable[str]:
alleles = db.serology_to_alleles(self.db_connection, serology)
return filter(self._is_allele_in_db, alleles)
return set(filter(self._is_allele_in_db, alleles))

@staticmethod
def _combine_with_colon(digits_field):
Expand Down
81 changes: 0 additions & 81 deletions pyard/broad_splits.py

This file was deleted.

11 changes: 10 additions & 1 deletion pyard/data_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import pyard.load
from pyard.smart_sort import smart_sort_comparator
from . import db
from .broad_splits import broad_splits_dna_mapping
from .serology import broad_splits_dna_mapping, get_all_valid_serology_names
from .load import (
load_g_group,
load_p_group,
Expand Down Expand Up @@ -483,3 +483,12 @@ def generate_cwd_mapping(db_connection: sqlite3.Connection):
if not db.table_exists(db_connection, "cwd2"):
cwd2_map = pyard.load.load_cwd2()
db.save_cwd2(db_connection, cwd2_map)


def build_valid_serology_set(db_connection: sqlite3.Connection):
valid_serology_names = get_all_valid_serology_names()
# Save to db if `valid_serology` table is not present
if not db.table_exists(db_connection, "valid_serology"):
db.save_set(db_connection, "valid_serology", valid_serology_names, "serology")

return set(valid_serology_names)
2 changes: 1 addition & 1 deletion pyard/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ def save_set(

:param connection: db connection of type sqlite.Connection
:param table_name: name of the table to create
:param rows: set which will become the the column in the table
:param rows: set which will become the column in the table
:param column: name of the column in the table
:return: success status
"""
Expand Down
Loading
Loading