| | import gradio as gr |
| | import pubchempy as pcp |
| |
|
| | def get_chemical_info(chemical_name): |
| | try: |
| | compound = pcp.get_compounds(chemical_name, 'name')[0] |
| |
|
| | output = [] |
| | output.append(f"IUPAC Name: {compound.iupac_name}") |
| | output.append(f"Common Name: {compound.synonyms[0]}") |
| | output.append(f"Synonyms: {', '.join(compound.synonyms[:4])}") |
| | output.append(f"Formula: {compound.molecular_formula}") |
| | output.append(f"Molecular Weight: {compound.molecular_weight}") |
| | output.append(f"Exact Molecular Weight: {compound.exact_mass}") |
| | output.append(f"Isotope Atom Count: {compound.isotope_atom_count}") |
| | output.append(f"Charge: {compound.charge}") |
| |
|
| | |
| | output.append("\nAtoms:") |
| | atom_dict = {i + 1: atom.element for i, atom in enumerate(compound.atoms)} |
| | for idx, element in atom_dict.items(): |
| | output.append(f" Atom {idx}: Element = {element}") |
| |
|
| | |
| | output.append("\nBonds:") |
| | for bond in compound.bonds: |
| | atom1 = atom_dict.get(bond.aid1, f"Atom {bond.aid1}") |
| | atom2 = atom_dict.get(bond.aid2, f"Atom {bond.aid2}") |
| | output.append(f" Bond between {atom1} and {atom2}, Order: {bond.order}") |
| |
|
| | final_text = "\n".join(output) |
| |
|
| | |
| | file_path = f"/tmp/{chemical_name.replace(' ', '_')}_info.txt" |
| | with open(file_path, "w") as f: |
| | f.write(final_text) |
| |
|
| | return final_text, file_path |
| |
|
| | except IndexError: |
| | return f"No information found for '{chemical_name}'. Please try a more precise name.", None |
| |
|
| |
|
| | |
| | with gr.Blocks(title="ChemQuery: Learn Molecules Easily") as demo: |
| | gr.Markdown("## ChemQuery: Learn Molecules Easily") |
| | gr.Markdown( |
| | """ |
| | Enter a chemical name to explore its molecular formula, synonyms, atomic structure, and bonding details. |
| | ChemQuery is Powered by PubChem & PubChemPy — designed to make chemistry learning simple and fun for students, teachers, and curious minds alike. |
| | |
| | If you find this initiative helpful, please: |
| | - ❤️ Give it a like |
| | - 🔁 Share it with your friends, classmates, or educators |
| | - ⭐ Star the GitHub repo: [ChemQuery](https://github.com/RezuwanHassan262/ChemQuery/tree/main) |
| | |
| | > _“ChemQuery is a free and open-source chemistry learning tool built as part of an educational initiative to support students worldwide.”_ |
| | |
| | Let's spread the love for science and open knowledge! 🌍🧪✨ |
| | |
| | """ |
| | ) |
| |
|
| | with gr.Row(): |
| | chemical_input = gr.Textbox(label="Enter Chemical Name", lines=1, scale=5) |
| | submit_btn = gr.Button("Submit", scale=1, elem_id="submit-btn") |
| |
|
| | gr.Markdown( |
| | """ |
| | <style> |
| | #submit-btn button { |
| | background-color: #48CAE4 !important; |
| | height: 48px !important; |
| | font-weight: bold; |
| | } |
| | </style> |
| | """ |
| | ) |
| |
|
| | output_text = gr.Textbox(label="Compound Information", lines=25) |
| | download_file = gr.File(label="Download as TXT") |
| |
|
| | submit_btn.click(get_chemical_info, inputs=chemical_input, outputs=[output_text, download_file]) |
| |
|
| | demo.launch() |
| |
|