pythia / app.py
jonashaag's picture
chmod
1795f1a
import bz2
import shutil
import tempfile
from pathlib import Path
import gradio as gr
import pypythia.msa
import pypythia.prediction
import pypythia.predictor
import pypythia.raxmlng
def get_default_raxmlng():
version = "1.1.0"
uncompressed_raxmlng = Path.home() / f"raxml-ng-v{version}-linux-64"
if not uncompressed_raxmlng.exists():
compressed_raxmlng = Path(__file__).parent / f"raxml-ng-v{version}-linux-64.bz2"
with bz2.BZ2File(compressed_raxmlng) as bz, uncompressed_raxmlng.open(
"wb"
) as rax:
shutil.copyfileobj(bz, rax)
uncompressed_raxmlng.chmod(755)
return uncompressed_raxmlng
def predict_difficulty(uploaded_file):
predictor_file = (
Path(pypythia.__file__).parent / "predictors" / "predictor_lgb_v1.0.0.pckl"
)
predictor = pypythia.predictor.DifficultyPredictor(predictor_file.open("rb"))
raxmlng = pypythia.raxmlng.RAxMLNG(
shutil.which("raxml-ng") or get_default_raxmlng()
)
with tempfile.NamedTemporaryFile() as msa_file:
uploaded_file.seek(0)
shutil.copyfileobj(uploaded_file, msa_file)
msa_file.flush()
msa = pypythia.msa.MSA(msa_file.name)
msa_features = pypythia.prediction.get_all_features(raxmlng, msa)
difficulty = predictor.predict(msa_features)
return difficulty, msa_features
pythia_demo = gr.Interface(
predict_difficulty,
gr.File(label="MSA file (.phy or .msa)"),
[
gr.Number(label="Difficulty", precision=5),
gr.JSON(label="Features used for prediction"),
],
)
pythia_demo.launch()