Skip to content

Commit

Permalink
Reimplement AutoPS1PM5 (#130)
Browse files Browse the repository at this point in the history
* update dependencies

* add integration tests

* integration tests

* add integration tests for PS1 PM5

* wip

* add tests

* rename assets

* add missense check for PS1/PM5

* minor
  • Loading branch information
gromdimon authored Jun 13, 2024
1 parent 0906b77 commit b6fdafa
Show file tree
Hide file tree
Showing 55 changed files with 835 additions and 405 deletions.
426 changes: 213 additions & 213 deletions Pipfile.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/api/annonars.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""Annonars API client."""

from time import sleep
from typing import Any, Optional

import requests
Expand Down
6 changes: 2 additions & 4 deletions src/auto_acmg.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ def predict(self) -> Optional[AutoACMGResult]:
# PVS1
try:
logger.info("Predicting PVS1.")
pvs1 = AutoPVS1(self.seqvar, self.genome_release, config=self.config)
pvs1 = AutoPVS1(self.seqvar, config=self.config)
seqvar_prediction, seqvar_prediction_path, comment = pvs1.predict()
if seqvar_prediction is None or seqvar_prediction_path is None:
raise AutoAcmgBaseException(
Expand Down Expand Up @@ -182,9 +182,7 @@ def predict(self) -> Optional[AutoACMGResult]:
# Other criteria
try:
logger.info("Predicting other ACMG criteria.")
auto_criteria = AutoACMGCriteria(
self.seqvar, self.genome_release, config=self.config
)
auto_criteria = AutoACMGCriteria(self.seqvar, config=self.config)
criteria_preciction = auto_criteria.predict()
if criteria_preciction is None:
raise AutoAcmgBaseException("Other ACMG criteria prediction failed.")
Expand Down
15 changes: 7 additions & 8 deletions src/criteria/auto_ba1_bs1_bs2_pm2.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,22 @@ class AutoBA1BS1BS2PM2:
def __init__(
self,
seqvar: SeqVar,
genome_release: GenomeRelease,
variant_info: VariantResult,
*,
config: Optional[Config] = None,
):
#: Configuration to use.
self.config = config or Config()
self.config: Config = config or Config()
#: Sequence variant to predict.
self.seqvar = seqvar
#: Genome release.
self.genome_release = genome_release
self.seqvar: SeqVar = seqvar
#: Variant information.
self.variant_info = variant_info
self.variant_info: VariantResult = variant_info
#: Annonars client.
self.annonars_client = AnnonarsClient(api_base_url=self.config.api_base_url_annonars)
self.annonars_client: AnnonarsClient = AnnonarsClient(
api_base_url=self.config.api_base_url_annonars
)
#: Prediction result.
self.prediction: BA1BS1BS2PM2 | None = None
self.prediction: Optional[BA1BS1BS2PM2] = None
#: Comment to store the prediction explanation.
self.comment: str = ""

Expand Down
17 changes: 8 additions & 9 deletions src/criteria/auto_bp7.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,22 @@ class AutoBP7:
def __init__(
self,
seqvar: SeqVar,
genome_release: GenomeRelease,
variant_info: VariantResult,
*,
config: Config,
config: Optional[Config] = None,
):
#: Configuration to use.
self.config = config or Config()
self.config: Config = config or Config()
#: Sequence variant to predict.
self.seqvar = seqvar
#: Genome release.
self.genome_release = genome_release
self.seqvar: SeqVar = seqvar
#: Variant information.
self.variant_info = variant_info
self.variant_info: VariantResult = variant_info
#: Annonars client.
self.annonars_client = AnnonarsClient(api_base_url=config.api_base_url_annonars)
self.annonars_client: AnnonarsClient = AnnonarsClient(
api_base_url=self.config.api_base_url_annonars
)
#: Prediction result.
self.prediction: BP7 | None = None
self.prediction: Optional[BP7] = None
#: Comment to store the prediction explanation.
self.comment: str = ""

Expand Down
37 changes: 13 additions & 24 deletions src/criteria/auto_criteria.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,14 @@
class AutoACMGCriteria:
"""Predict ACMG criteria for sequence variant."""

def __init__(
self, seqvar: SeqVar, genome_release: GenomeRelease, *, config: Optional[Config] = None
):
def __init__(self, seqvar: SeqVar, *, config: Optional[Config] = None):
#: Configuration to use.
self.config = config or Config()
self.config: Config = config or Config()
# Attributes to be set
self.seqvar = seqvar
self.genome_release = genome_release
self.annonars_client = AnnonarsClient(api_base_url=self.config.api_base_url_annonars)
self.seqvar: SeqVar = seqvar
self.annonars_client: AnnonarsClient = AnnonarsClient(
api_base_url=self.config.api_base_url_annonars
)
self.prediction: Optional[ACMGResult] = None

def _get_variant_info(self, seqvar: SeqVar) -> Optional[AnnonarsVariantResponse]:
Expand Down Expand Up @@ -57,9 +56,7 @@ def predict(self) -> Optional[ACMGResult]:
# PS1 and PM5
try:
logger.info("Predicting PS1 and PM5 criteria.")
ps1pm5 = AutoPS1PM5(
self.seqvar, self.genome_release, variant_info.result, config=self.config
)
ps1pm5 = AutoPS1PM5(self.seqvar, variant_info.result, config=self.config)
ps1_pm5_prediction, ps1_pm5_comment = ps1pm5.predict()
if not ps1_pm5_prediction:
logger.error("Failed to predict PS1&PM5 criteria.")
Expand All @@ -81,9 +78,7 @@ def predict(self) -> Optional[ACMGResult]:
# PM4 and BP3
try:
logger.info("Predicting PM4 and BP3 criteria.")
pm4bp3 = AutoPM4BP3(
self.seqvar, self.genome_release, variant_info.result, config=self.config
)
pm4bp3 = AutoPM4BP3(self.seqvar, variant_info.result, config=self.config)
pm4_bp3_prediction, pm4_bp3_comment = pm4bp3.predict()
if not pm4_bp3_prediction:
logger.error("Failed to predict PM4&BP3 criteria.")
Expand All @@ -105,9 +100,7 @@ def predict(self) -> Optional[ACMGResult]:
# BA1, BS1, BS2, PM2
try:
logger.info("Predicting BA1, BS1, BS2, and PM2 criteria.")
ba1bs1bs2pm2 = AutoBA1BS1BS2PM2(
self.seqvar, self.genome_release, variant_info.result, config=self.config
)
ba1bs1bs2pm2 = AutoBA1BS1BS2PM2(self.seqvar, variant_info.result, config=self.config)
ba1bs1bs2pm2_prediction, ba1bs1bs2pm2_comment = ba1bs1bs2pm2.predict()
if not ba1bs1bs2pm2_prediction:
logger.error("Failed to predict BA1, BS1, BS2, and PM2 criteria.")
Expand Down Expand Up @@ -147,7 +140,7 @@ def predict(self) -> Optional[ACMGResult]:
# PM1
try:
logger.info("Predicting PM1 criteria.")
pm1 = AutoPM1(self.seqvar, self.genome_release, variant_info.result, config=self.config)
pm1 = AutoPM1(self.seqvar, variant_info.result, config=self.config)
pm1_prediction, pm1_comment = pm1.predict()
if not pm1_prediction:
logger.error("Failed to predict PM1 criteria.")
Expand All @@ -164,9 +157,7 @@ def predict(self) -> Optional[ACMGResult]:
# PP2 and BP1
try:
logger.info("Predicting PP2 and BP1 criteria.")
pp2bp1 = AutoPP2BP1(
self.seqvar, self.genome_release, variant_info.result, config=self.config
)
pp2bp1 = AutoPP2BP1(self.seqvar, variant_info.result, config=self.config)
pp2_bp1_prediction, pp2_bp1_comment = pp2bp1.predict()
if not pp2_bp1_prediction:
logger.error("Failed to predict PP2 and BP1 criteria.")
Expand All @@ -187,7 +178,7 @@ def predict(self) -> Optional[ACMGResult]:
# BP7
try:
logger.info("Predicting BP7 criteria.")
bp7 = AutoBP7(self.seqvar, self.genome_release, variant_info.result, config=self.config)
bp7 = AutoBP7(self.seqvar, variant_info.result, config=self.config)
bp7_prediction, bp7_comment = bp7.predict()
if not bp7_prediction:
logger.error("Failed to predict BP7 criteria.")
Expand All @@ -204,9 +195,7 @@ def predict(self) -> Optional[ACMGResult]:
# PP3 and BP4
try:
logger.info("Predicting PP3 and BP4 criteria.")
pp3_bp4 = AutoPP3BP4(
self.seqvar, self.genome_release, variant_info.result, config=self.config
)
pp3_bp4 = AutoPP3BP4(self.seqvar, variant_info.result, config=self.config)
pp3_bp4_prediction, pp3_bp4_comment = pp3_bp4.predict()
if not pp3_bp4_prediction:
logger.error("Failed to predict PP3 and BP4 criteria.")
Expand Down
17 changes: 8 additions & 9 deletions src/criteria/auto_pm1.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,22 @@ class AutoPM1:
def __init__(
self,
seqvar: SeqVar,
genome_release: GenomeRelease,
variant_info: VariantResult,
*,
config: Config,
config: Optional[Config] = None,
):
#: Configuration to use.
self.config = config or Config()
self.config: Config = config or Config()
#: Sequence variant to predict.
self.seqvar = seqvar
#: Genome release.
self.genome_release = genome_release
self.seqvar: SeqVar = seqvar
#: Variant information.
self.variant_info = variant_info
self.variant_info: VariantResult = variant_info
#: Annonars client.
self.annonars_client = AnnonarsClient(api_base_url=config.api_base_url_annonars)
self.annonars_client: AnnonarsClient = AnnonarsClient(
api_base_url=self.config.api_base_url_annonars
)
#: Prediction result.
self.prediction: PM1 | None = None
self.prediction: Optional[PM1] = None
#: Comment to store the prediction explanation.
self.comment: str = ""

Expand Down
15 changes: 7 additions & 8 deletions src/criteria/auto_pm4_bp3.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,22 @@ class AutoPM4BP3:
def __init__(
self,
seqvar: SeqVar,
genome_release: GenomeRelease,
variant_info: VariantResult,
*,
config: Optional[Config] = None,
):
#: Configuration to use.
self.config = config or Config()
self.config: Config = config or Config()
#: Sequence variant to predict.
self.seqvar = seqvar
#: Genome release.
self.genome_release = genome_release
self.seqvar: SeqVar = seqvar
#: Variant information.
self.variant_info = variant_info
self.variant_info: VariantResult = variant_info
#: Annonars client.
self.annonars_client = AnnonarsClient(api_base_url=self.config.api_base_url_annonars)
self.annonars_client: AnnonarsClient = AnnonarsClient(
api_base_url=self.config.api_base_url_annonars
)
#: Prediction result.
self.prediction: PM4BP3 | None = None
self.prediction: Optional[PM4BP3] = None
#: Comment to store the prediction explanation.
self.comment: str = ""

Expand Down
17 changes: 8 additions & 9 deletions src/criteria/auto_pp2_bp1.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,22 @@ class AutoPP2BP1:
def __init__(
self,
seqvar: SeqVar,
genome_release: GenomeRelease,
variant_info: VariantResult,
*,
config: Config,
config: Optional[Config] = None,
):
#: Configuration to use.
self.config = config or Config()
self.config: Config = config or Config()
#: Sequence variant to predict.
self.seqvar = seqvar
#: Genome release.
self.genome_release = genome_release
self.seqvar: SeqVar = seqvar
#: Variant information.
self.variant_info = variant_info
self.variant_info: VariantResult = variant_info
#: Annonars client.
self.annonars_client = AnnonarsClient(api_base_url=config.api_base_url_annonars)
self.annonars_client: AnnonarsClient = AnnonarsClient(
api_base_url=self.config.api_base_url_annonars
)
#: Prediction result.
self.prediction: PP2BP1 | None = None
self.prediction: Optional[PP2BP1] = None
#: Comment to store the prediction explanation.
self.comment: str = ""

Expand Down
17 changes: 8 additions & 9 deletions src/criteria/auto_pp3_bp4.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,22 @@ class AutoPP3BP4:
def __init__(
self,
seqvar: SeqVar,
genome_release: GenomeRelease,
variant_info: VariantResult,
*,
config: Config,
config: Optional[Config] = None,
):
#: Configuration to use.
self.config = config or Config()
self.config: Config = config or Config()
#: Sequence variant to predict.
self.seqvar = seqvar
#: Genome release.
self.genome_release = genome_release
self.seqvar: SeqVar = seqvar
#: Variant information.
self.variant_info = variant_info
self.variant_info: VariantResult = variant_info
#: Annonars client.
self.annonars_client = AnnonarsClient(api_base_url=config.api_base_url_annonars)
self.annonars_client: AnnonarsClient = AnnonarsClient(
api_base_url=self.config.api_base_url_annonars
)
#: Prediction result.
self.prediction: PP3BP4 | None = None
self.prediction: Optional[PP3BP4] = None
#: Comment to store the prediction explanation.
self.comment: str = ""

Expand Down
Loading

0 comments on commit b6fdafa

Please sign in to comment.