import gradio as gr from rdkit import Chem from rdkit.Chem import Descriptors, rdMolDescriptors # دالة SA Score بسيطة def simple_sa_score(smiles): mol = Chem.MolFromSmiles(smiles) if not mol: return "❌ SMILES غير صالح" mw = Descriptors.MolWt(mol) rot_bonds = rdMolDescriptors.CalcNumRotatableBonds(mol) num_atoms = mol.GetNumAtoms() score = 0 score += 1 if mw > 500 else 0 score += 1 if rot_bonds > 10 else 0 score += 1 if num_atoms > 50 else 0 sa_score = round(1 + score * 3, 2) if sa_score <= 4: level = "🔬 سهل التصنيع ✅" elif sa_score <= 7: level = "⚠️ متوسط الصعوبة" else: level = "❌ صعب تصنيعه معمليًا" return f"🧪 SA Score: {sa_score} / 10\n{level}" # واجهة Gradio demo = gr.Interface( fn=simple_sa_score, inputs=gr.Textbox(label="🔬 أدخل SMILES هنا"), outputs=gr.Textbox(label="📊 التقييم"), title="تقييم SA Score", description="تحليل مدى سهولة تصنيع المركب بناءً على SMILES" ) demo.launch()