pythia / app.py
jonashaag's picture
chmod
1795f1a
raw
history blame
1.62 kB
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()