def test_improper_fake(self): site1 = Site(name='site1') site2 = Site(name='site2') site3 = Site(name='site3') site4 = Site(name='site4') with pytest.raises(GMSOError): Improper(connection_members=['fakesite1', 'fakesite2', 4.2])
def test_bond_fake_ctype(self): site1 = Site(name='site1') site2 = Site(name='site2') with pytest.raises(GMSOError): Connection(connection_members=[site1, site2], connection_type='Fake ctype', name='fake')
def test_angle_fake_angletype(self): site1 = Site(name='site1') site2 = Site(name='site2') site3 = Site(name='site3') with pytest.raises(GMSOError): Angle(connection_members=[site1, site2, site3], connection_type='Fake angletype')
def test_set_with_atom_type(self): lithium_type = AtomType(mass=6.941, charge=1) site = Site(name='Lithium') site.atom_type = lithium_type assert site.charge == 1 * u.elementary_charge assert site.mass == 6.941 * u.gram / u.mol
def _get_atoms(filename, topology, unit_style, type_list): """Function to parse the atom information in the LAMMPS data file """ with open(filename, 'r') as lammps_file: for i, line in enumerate(lammps_file): if 'atoms' in line.split(): n_atoms = int(line.split()[0]) if 'Atoms' in line.split(): break atom_lines = open(filename, 'r').readlines()[i+2:i+n_atoms+2] for line in atom_lines: atom_line = line.split() atom_type = atom_line[2] charge = u.unyt_quantity(float(atom_line[3]), get_units(unit_style)['charge']) coord = u.angstrom * u.unyt_array([ float(atom_line[4]), float(atom_line[5]), float(atom_line[6])]) site = Site( charge=charge, position=coord, atom_type=type_list[int(atom_type)-1] ) element = element_by_mass(site.atom_type.mass.value) site.name = element.name site.element = element topology.add_site(site) topology.update_sites() return topology
def test_dihedral_fake(self): site1 = Site(name='site1') site2 = Site(name='site2') site3 = Site(name='site3') site4 = Site(name='site4') with pytest.raises(GMSOError): Dihedral(connection_members=['fakesite1', 'fakesite2', 4.2])
def test_dihedral_fake_dihedraltype(self): site1 = Site(name='site1') site2 = Site(name='site2') site3 = Site(name='site3') site4 = Site(name='site4') with pytest.raises(GMSOError): Dihedral(connection_members=[site1, site2, site3, site4], connection_type='Fake dihedraltype')
def test_improper_fake_impropertype(self): site1 = Site(name='site1') site2 = Site(name='site2') site3 = Site(name='site3') site4 = Site(name='site4') with pytest.raises(GMSOError): Improper(connection_members=[site1, site2, site3, site4], connection_type='Fake impropertype')
def test_connection_eq(self): site1 = Site(name='site1', position=[0, 0, 0]) site2 = Site(name='site2', position=[1, 1, 1]) ref_connection = Connection(connection_members=[site1, site2], ) same_connection = Connection(connection_members=[site1, site2], ) # Two connections are never equal assert ref_connection != same_connection
def test_equivalence(self): ref = Site(name='site', position=u.nm * np.zeros(3)) same_site = Site(name='site', position=u.nm * np.zeros(3)) other_pos = Site(name='site', position=u.nm * np.ones(3)) other_name = Site(name='site', position=u.nm * np.ones(3)) # Two sites are never equivalent assert ref != same_site assert ref != other_pos assert ref != other_name
def test_add_connection_non_member(self): site1, site2, site3 = (Site(), Site(), Site()) bond1, bond2, bond3 = (Bond([site1, site2]), Bond([site2, site3]), Bond([site1, site3])) assert site1.n_connections == site2.n_connections == site3.n_connections == 2 with pytest.raises(GMSOError): site3.add_connection(bond1) site2.add_connection(bond3) site1.add_connection(bond2)
def test_with_1000_atom_types(self): top = Topology() for i in range(1000): site = Site() atom_type = AtomType() site.atom_type = atom_type top.add_site(site, update_types=False) top.update_topology() assert len(top.atom_types) == 1 assert top.n_sites == 1000
def test_add_connection(self): top = Topology() site1 = Site(name='site1') site2 = Site(name='site2') connect = Bond(connection_members=[site1, site2]) top.add_connection(connect) top.add_site(site1) top.add_site(site2) assert len(top.connections) == 1
def test_connection_nonparametrized(self): site1 = Site(name='site1') site2 = Site(name='site2') assert site1.n_connections == 0 assert site2.n_connections == 0 connect = Connection(connection_members=[site1, site2]) assert site1.n_connections == 1 assert site2.n_connections == 1 assert connect.connection_type is None
def test_bond_eq(self): site1 = Site(name='site1', position=[0, 0, 0]) site2 = Site(name='site2', position=[1, 1, 1]) ref_connection = Bond(connection_members=[site1, site2], ) same_connection = Bond(connection_members=[site1, site2], ) diff_connection = Bond(connection_members=[site1, site2], ) assert ref_connection != same_connection assert ref_connection != diff_connection
def test_add_connection_redundant(self): site1, site2, site3 = (Site(), Site(), Site()) bond1, bond2, bond3 = (Bond([site1, site2]), Bond([site2, site3]), Bond([site1, site3])) assert site1.n_connections == site2.n_connections == site3.n_connections == 2 site1.add_connection(bond1) site1.add_connection(bond3) site2.add_connection(bond1) site2.add_connection(bond2) site3.add_connection(bond3) site3.add_connection(bond2) assert site1.n_connections == site2.n_connections == site3.n_connections == 2
def test_angle_eq(self): site1 = Site(name='site1', position=[0, 0, 0]) site2 = Site(name='site2', position=[1, 1, 1]) site3 = Site(name='site3', position=[1, 1, 1]) ref_angle = Angle(connection_members=[site1, site2, site3], ) same_angle = Angle(connection_members=[site1, site2, site3], ) diff_angle = Angle(connection_members=[site3, site2, site1], ) assert ref_angle != same_angle assert ref_angle != diff_angle
def test_topology_atom_type_changes(self): top = Topology() for i in range(100): site = Site(name='site{}'.format(i)) atom_type = AtomType(name='atom_type{}'.format(i % 10)) site.atom_type = atom_type top.add_site(site, update_types=False) top.update_topology() assert len(top.atom_types) == 10 top.sites[0].atom_type.name = 'atom_type_changed' assert id(top.sites[0].atom_type) == id(top.sites[10].atom_type) assert top.sites[10].atom_type.name == 'atom_type_changed' assert top.is_typed()
def test_bond_constituent_types(self): site1 = Site(name='site1', position=[0, 0, 0], atom_type=AtomType(name='A')) site2 = Site(name='site2', position=[1, 0, 0], atom_type=AtomType(name='B')) bondtype = BondType( member_types=[site1.atom_type.name, site2.atom_type.name]) bond = Bond(connection_members=[site1, site2], connection_type=bondtype) assert 'A' in bond.connection_type.member_types assert 'B' in bond.connection_type.member_types
def test_top_update(self): top = Topology() top.update_topology() assert top.n_sites == 0 assert len(top.atom_types) == 0 assert len(top.atom_type_expressions) == 0 assert top.n_connections == 0 assert len(top.connection_types) == 0 assert len(top.connection_type_expressions) == 0 atomtype = AtomType() site1 = Site(name='site1', atom_type=atomtype) top.add_site(site1) site2 = Site(name='site2', atom_type=atomtype) top.add_site(site2) assert top.n_sites == 2 assert len(top.atom_types) == 1 assert len(top.atom_type_expressions) == 1 assert top.n_connections == 0 assert len(top.connection_types) == 0 assert len(top.connection_type_expressions) == 0 ctype = BondType() connection_12 = Bond(connection_members=[site1, site2], connection_type=ctype) top.add_connection(connection_12) assert top.n_sites == 2 assert len(top.atom_types) == 1 assert len(top.atom_type_expressions) == 1 assert top.n_connections == 1 assert len(top.connection_types) == 1 assert len(top.connection_type_expressions) == 1 site1.atom_type = AtomType(expression='sigma*epsilon') assert top.n_sites == 2 assert len(top.atom_types) == 1 assert len(top.atom_type_expressions) == 1 assert top.n_connections == 1 assert len(top.connection_types) == 1 assert len(top.connection_type_expressions) == 1 top.update_atom_types() assert top.n_sites == 2 assert len(top.atom_types) == 2 assert len(top.atom_type_expressions) == 2 assert top.n_connections == 1 assert len(top.connection_types) == 1 assert len(top.connection_type_expressions) == 1
def test_add_untyped_bond_update(self): site1 = Site(atom_type=None) site2 = Site(atom_type=None) bond = Bond(connection_members=[site1, site2], connection_type=None) top = Topology() assert len(top.bond_types) == 0 top.add_connection(bond, update_types=False) assert len(top.bond_types) == 0 top = Topology() assert len(top.bond_types) == 0 top.add_connection(bond, update_types=True) assert len(top.bond_types) == 0
def test_improper_constituent_types(self): site1 = Site(name='site1', position=[0,0,0], atom_type=AtomType(name='A')) site2 = Site(name='site2', position=[1,0,0], atom_type=AtomType(name='B')) site3 = Site(name='site3', position=[1,1,0], atom_type=AtomType(name='C')) site4 = Site(name='site4', position=[1,1,4], atom_type=AtomType(name='D')) imptype = ImproperType(member_types=[site1.atom_type.name, site2.atom_type.name, site3.atom_type.name, site4.atom_type.name]) imp = Improper(connection_members=[site1, site2, site3, site4], connection_type=imptype) assert 'A' in imp.connection_type.member_types assert 'B' in imp.connection_type.member_types assert 'C' in imp.connection_type.member_types assert 'D' in imp.connection_type.member_types
def test_angle_nonparametrized(self): site1 = Site(name='site1') site2 = Site(name='site2') site3 = Site(name='site3') assert site1.n_connections == 0 assert site2.n_connections == 0 assert site3.n_connections == 0 connect = Angle(connection_members=[site1, site2, site3]) assert site1.n_connections == 1 assert site2.n_connections == 1 assert site3.n_connections == 1 assert connect.connection_type is None
def test_add_site_parent(self): top = Topology() subtop = SubTopology() site1 = Site(position=u.nm * np.zeros(3)) site2 = Site(position=u.nm * np.ones(3)) top.add_subtopology(subtop) assert top.n_sites == 0 assert subtop.n_sites == 0 subtop.add_site(site1) assert top.n_sites == 1 assert subtop.n_sites == 1 top.add_site(site2) assert top.n_sites == 2 assert subtop.n_sites == 1
def test_add_site(self): top = Topology() site = Site(name='site') assert top.n_sites == 0 top.add_site(site) assert top.n_sites == 1
def test_to_mbuild_name_none(self): top = Top() top.add_site(Site()) top.name = None compound = to_mbuild(top) assert compound.name == 'Compound'
def test_bond_bondtype_update(self): top = Topology() atype1 = AtomType(expression='sigma + epsilon') atype2 = AtomType(expression='sigma * epsilon') site1 = Site('a', atom_type=atype1) site2 = Site('b', atom_type=atype2) btype = BondType() bond = Bond(connection_members=[site1, site2], connection_type=btype) top.add_site(site1) top.add_site(site2) top.add_connection(bond) assert top.n_bonds == 1 assert len(top.bond_types) == 1 assert len(top.bond_type_expressions) == 1
def test_subtop_add_site(self): subtop = SubTopology() site = Site() subtop.add_site(site) assert subtop.n_sites == 1
def test_atomtype_update(self): top = Topology() assert top.n_sites == 0 assert top.n_bonds == 0 assert top.n_connections == 0 atype1 = AtomType(expression='sigma + epsilon') atype2 = AtomType(expression='sigma * epsilon') site1 = Site('a', atom_type=atype1) site2 = Site('b', atom_type=atype2) top.add_site(site1) top.add_site(site2) assert top.n_sites == 2 assert len(top.atom_types) == 2 assert len(top.atom_type_expressions) == 2
def test_dihedral_eq(self): site1 = Site(name='site1', position=[0, 0, 0]) site2 = Site(name='site2', position=[1, 0, 0]) site3 = Site(name='site3', position=[1, 1, 0]) site4 = Site(name='site4', position=[1, 1, 1]) ref_dihedral = Dihedral( connection_members=[site1, site2, site3, site4], ) same_dihedral = Dihedral( connection_members=[site1, site2, site3, site4], ) diff_dihedral = Dihedral( connection_members=[site1, site2, site3, site4], ) assert ref_dihedral != same_dihedral assert ref_dihedral != diff_dihedral