Source code for vabene.molecule.molecule

"""
Molecule
========

"""

from .utilities import dedupe


[docs]class Molecule: """ A molecular graph. Parameters ---------- atoms : :class:`tuple` of :class:`.Atom` The atoms of the molecule. bonds : :class:`iterable` of :class:`.Bond` The bonds of the molecule. """ def __init__(self, atoms, bonds): self._atoms = atoms def get_atom_ids(bond): return frozenset(bond.get_atom_ids()) self._bonds = tuple(dedupe(bonds, get_key=get_atom_ids))
[docs] def get_atoms(self, atom_ids=None): """ Yield the atoms of the molecule. Parameters ---------- atom_ids : :class:`iterable` of :class:`int` The ids of the atoms which should be yielded. Can be an :class:`int`, if only one atom should be yielded. Yields ------ :class:`.Atom` An atom of the molecule. """ if atom_ids is None: atom_ids = range(len(self._atoms)) elif isinstance(atom_ids, int): atom_ids = (atom_ids, ) for atom_id in atom_ids: yield self._atoms[atom_id]
[docs] def get_num_atoms(self): """ Return the number of atoms in the molecule. Returns ------- :class:`int` The number of atoms in the molecule. """ return len(self._atoms)
[docs] def get_bonds(self, bond_ids=None): """ Yield the bonds of the molecule. Parameters ---------- bond_ids : :class:`iterable` of :class:`int` The ids of bonds which should be yielded. Can be an :class:`int`, if only one bond should be yielded. Yields ------ :class:`.Bond` A bond of the molecule. """ if bond_ids is None: bond_ids = range(len(self._bonds)) elif isinstance(bond_ids, int): bond_ids = (bond_ids, ) for bond_id in bond_ids: yield self._bonds[bond_id]
[docs] def get_num_bonds(self): """ Return the number of bonds in the molecule. Returns ------- :class:`int` The number of bonds in the molecule. """ return len(self._bonds)