From 8a6dba4ce9e1544ed6b1563ab0e4830ea8a27d54 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 23 Dec 2025 21:11:15 +0530 Subject: [PATCH 01/10] feat: enable reading unit cell dimensions from MOL2 CRYSIN records --- package/MDAnalysis/coordinates/MOL2.py | 4 ++++ testsuite/MDAnalysisTests/data/mol2/test_crysin.mol2 | 10 ++++++++++ 2 files changed, 14 insertions(+) create mode 100644 testsuite/MDAnalysisTests/data/mol2/test_crysin.mol2 diff --git a/package/MDAnalysis/coordinates/MOL2.py b/package/MDAnalysis/coordinates/MOL2.py index e3f4c016158..a3a9d0e2bc9 100644 --- a/package/MDAnalysis/coordinates/MOL2.py +++ b/package/MDAnalysis/coordinates/MOL2.py @@ -241,6 +241,10 @@ def _read_frame(self, frame): sections, coords = self.parse_block(block) + if "crysin" in sections: + dims = sections["crysin"][0].split()[:6] + self.ts.dimensions = np.array(dims, dtype=np.float32) + for sect in ["molecule", "substructure"]: try: self.ts.data[sect] = sections[sect] diff --git a/testsuite/MDAnalysisTests/data/mol2/test_crysin.mol2 b/testsuite/MDAnalysisTests/data/mol2/test_crysin.mol2 new file mode 100644 index 00000000000..51959f75a2c --- /dev/null +++ b/testsuite/MDAnalysisTests/data/mol2/test_crysin.mol2 @@ -0,0 +1,10 @@ +@MOLECULE +test_structure + 1 0 0 0 0 +SMALL +USER_CHARGES +@ATOM + 1 C 0.0000 0.0000 0.0000 C.3 1 ALA 0.0000 +@CRYSIN + 40.0000 50.0000 60.0000 90.0000 90.0000 90.0000 1 1 +@END \ No newline at end of file From 74d92d1e44631afb19d6dc6dfbbd8570b495aca5 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 23 Dec 2025 21:11:25 +0530 Subject: [PATCH 02/10] test: add test case for MOL2 CRYSIN unit cell dimensions --- testsuite/MDAnalysisTests/coordinates/test_mol2.py | 10 ++++++++++ testsuite/MDAnalysisTests/datafiles.py | 1 + 2 files changed, 11 insertions(+) diff --git a/testsuite/MDAnalysisTests/coordinates/test_mol2.py b/testsuite/MDAnalysisTests/coordinates/test_mol2.py index 494b2ace2af..27ae9804282 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_mol2.py +++ b/testsuite/MDAnalysisTests/coordinates/test_mol2.py @@ -21,6 +21,7 @@ # J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 # import pytest +import numpy as np import os from numpy.testing import ( @@ -39,6 +40,7 @@ mol2_comments_header, mol2_ligand, mol2_sodium_ion, + mol2_crysin, ) from MDAnalysis import Universe import MDAnalysis as mda @@ -232,3 +234,11 @@ def test_mol2_universe_write(tmpdir): assert_almost_equal(u.atoms.positions, u2.atoms.positions) # MDA does not current implement @CRYSIN reading assert u2.dimensions is None + + +def test_mol2_crysin_dimensions(): + # test that crysin records are read as dimensions + u = mda.Universe(mol2_crysin) + + expected = np.array([40.0, 50.0, 60.0, 90.0, 90.0, 90.0], dtype=np.float32) + assert_array_almost_equal(u.dimensions, expected, decimal=3) diff --git a/testsuite/MDAnalysisTests/datafiles.py b/testsuite/MDAnalysisTests/datafiles.py index 01336e8aa9a..49573e79cb9 100644 --- a/testsuite/MDAnalysisTests/datafiles.py +++ b/testsuite/MDAnalysisTests/datafiles.py @@ -735,6 +735,7 @@ mol2_zinc = (_data_ref / "mol2/zinc_856218.mol2").as_posix() # MOL2 file without bonds mol2_sodium_ion = (_data_ref / "mol2/sodium_ion.mol2").as_posix() +mol2_crysin = (_data_ref / "mol2/test_crysin.mol2").as_posix() capping_input = (_data_ref / "capping/aaqaa.gro").as_posix() capping_output = (_data_ref / "capping/maestro_aaqaa_capped.pdb").as_posix() From d4a53a493ed33b10b5fb226a19d58ae650bb28a7 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 23 Dec 2025 21:24:40 +0530 Subject: [PATCH 03/10] style: apply black formatting --- package/MDAnalysis/coordinates/MOL2.py | 17 +-- .../MDAnalysisTests/coordinates/test_mol2.py | 14 +-- testsuite/MDAnalysisTests/datafiles.py | 112 +++++------------- 3 files changed, 36 insertions(+), 107 deletions(-) diff --git a/package/MDAnalysis/coordinates/MOL2.py b/package/MDAnalysis/coordinates/MOL2.py index a3a9d0e2bc9..8a678e4efd8 100644 --- a/package/MDAnalysis/coordinates/MOL2.py +++ b/package/MDAnalysis/coordinates/MOL2.py @@ -233,10 +233,7 @@ def _read_frame(self, frame): try: block = self.frames[frame] except IndexError: - errmsg = ( - f"Invalid frame {frame} for trajectory with length " - f"{len(self)}" - ) + errmsg = f"Invalid frame {frame} for trajectory with length " f"{len(self)}" raise IOError(errmsg) from None sections, coords = self.parse_block(block) @@ -311,9 +308,7 @@ def __init__(self, filename, n_atoms=None, convert_units=True): units are converted to the MDAnalysis base format; [``True``] """ self.filename = filename - self.convert_units = ( - convert_units # convert length and time to base units - ) + self.convert_units = convert_units # convert length and time to base units self.frames_written = 0 @@ -388,9 +383,7 @@ def encode_block(self, obj): atom_lines = "\n".join(atom_lines) try: - substructure = ["@SUBSTRUCTURE\n"] + ts.data[ - "substructure" - ] + substructure = ["@SUBSTRUCTURE\n"] + ts.data["substructure"] except KeyError: substructure = "" @@ -405,9 +398,7 @@ def encode_block(self, obj): molecule[1] = "{0}\n".format(" ".join(check_sums)) molecule.insert(0, "@MOLECULE\n") - return_val = ( - "".join(molecule) + atom_lines + bond_lines + "".join(substructure) - ) + return_val = "".join(molecule) + atom_lines + bond_lines + "".join(substructure) molecule[0] = molecule_0_store molecule[1] = molecule_1_store diff --git a/testsuite/MDAnalysisTests/coordinates/test_mol2.py b/testsuite/MDAnalysisTests/coordinates/test_mol2.py index 27ae9804282..2355f119b61 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_mol2.py +++ b/testsuite/MDAnalysisTests/coordinates/test_mol2.py @@ -57,9 +57,7 @@ def test_read(self): assert_equal(u.trajectory.n_frames, 200) u.trajectory[199] - assert_array_almost_equal( - u.atoms.positions[0], [1.7240, 11.2730, 14.1200] - ) + assert_array_almost_equal(u.atoms.positions[0], [1.7240, 11.2730, 14.1200]) def test_read_statusbit(self): u = Universe(mol2_ligand) @@ -115,9 +113,7 @@ def test_comments_header(self): assert_equal(len(u.atoms), 9) assert_equal(u.trajectory.n_frames, 2) u.trajectory[1] - assert_array_almost_equal( - u.atoms.positions[2], [-12.2710, -1.9540, -16.0480] - ) + assert_array_almost_equal(u.atoms.positions[2], [-12.2710, -1.9540, -16.0480]) def test_no_bonds(self, tmpdir): # Issue #3057 @@ -165,9 +161,7 @@ def test_slice_traj(self): def test_reverse_traj(self): frames = [ts.frame for ts in self.traj[20:5:-1]] - assert_equal( - frames, list(range(20, 5, -1)), "reversing traj [20:5:-1]" - ) + assert_equal(frames, list(range(20, 5, -1)), "reversing traj [20:5:-1]") def test_n_frames(self): assert_equal( @@ -234,7 +228,7 @@ def test_mol2_universe_write(tmpdir): assert_almost_equal(u.atoms.positions, u2.atoms.positions) # MDA does not current implement @CRYSIN reading assert u2.dimensions is None - + def test_mol2_crysin_dimensions(): # test that crysin records are read as dimensions diff --git a/testsuite/MDAnalysisTests/datafiles.py b/testsuite/MDAnalysisTests/datafiles.py index 49573e79cb9..a068d9cf10a 100644 --- a/testsuite/MDAnalysisTests/datafiles.py +++ b/testsuite/MDAnalysisTests/datafiles.py @@ -399,9 +399,7 @@ _data_ref = resources.files("MDAnalysisTests.data") -WIN_PDB_multiframe = ( - _data_ref / "windows/WIN_nmr_neopetrosiamide.pdb" -).as_posix() +WIN_PDB_multiframe = (_data_ref / "windows/WIN_nmr_neopetrosiamide.pdb").as_posix() WIN_DLP_HISTORY = (_data_ref / "windows/WIN_HISTORY").as_posix() WIN_TRJ = (_data_ref / "windows/WIN_ache.mdcrd").as_posix() WIN_ARC = (_data_ref / "windows/WIN_test.arc").as_posix() @@ -450,9 +448,7 @@ PSF_NAMD = (_data_ref / "namd_cgenff.psf").as_posix() PDB_NAMD = (_data_ref / "namd_cgenff.pdb").as_posix() -PDB_multipole = ( - _data_ref / "water_methane_acetic-acid_ammonia.pdb" -).as_posix() +PDB_multipole = (_data_ref / "water_methane_acetic-acid_ammonia.pdb").as_posix() PSF_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.psf").as_posix() DCD_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.dcd").as_posix() PSF_NAMD_GBIS = (_data_ref / "adk_closed_NAMD.psf").as_posix() @@ -480,9 +476,7 @@ PDB_mc_gz = (_data_ref / "model_then_cryst.pdb.gz").as_posix() PDB_mc_bz2 = (_data_ref / "model_then_cryst.pdb.bz2").as_posix() PDB_chainidnewres = (_data_ref / "chainIDnewres.pdb.gz").as_posix() -PDB_sameresid_diffresname = ( - _data_ref / "sameresid_diffresname.pdb" -).as_posix() +PDB_sameresid_diffresname = (_data_ref / "sameresid_diffresname.pdb").as_posix() PDB_chainidrepeat = (_data_ref / "chainIDrepeat.pdb.gz").as_posix() PDB_multiframe = (_data_ref / "nmr_neopetrosiamide.pdb").as_posix() PDB_helix = (_data_ref / "A6PA6_alpha.pdb").as_posix() @@ -500,9 +494,7 @@ GRO_large = (_data_ref / "bigbox.gro.bz2").as_posix() GRO_residwrap = (_data_ref / "residwrap.gro").as_posix() GRO_residwrap_0base = (_data_ref / "residwrap_0base.gro").as_posix() -GRO_sameresid_diffresname = ( - _data_ref / "sameresid_diffresname.gro" -).as_posix() +GRO_sameresid_diffresname = (_data_ref / "sameresid_diffresname.gro").as_posix() PDB = (_data_ref / "adk_oplsaa.pdb").as_posix() XTC = (_data_ref / "adk_oplsaa.xtc").as_posix() TRR = (_data_ref / "adk_oplsaa.trr").as_posix() @@ -514,20 +506,12 @@ PDB_xlserial = (_data_ref / "xl_serial.pdb").as_posix() GRO_MEMPROT = (_data_ref / "analysis/YiiP_lipids.gro.gz").as_posix() XTC_MEMPROT = (_data_ref / "analysis/YiiP_lipids.xtc").as_posix() -XTC_multi_frame = ( - _data_ref / "xtc_test_only_10_frame_10_atoms.xtc" -).as_posix() -TRR_multi_frame = ( - _data_ref / "trr_test_only_10_frame_10_atoms.trr" -).as_posix() +XTC_multi_frame = (_data_ref / "xtc_test_only_10_frame_10_atoms.xtc").as_posix() +TRR_multi_frame = (_data_ref / "trr_test_only_10_frame_10_atoms.trr").as_posix() TNG_traj = (_data_ref / "argon_npt_compressed.tng").as_posix() TNG_traj_gro = (_data_ref / "argon_npt_compressed.gro.gz").as_posix() -TNG_traj_uneven_blocks = ( - _data_ref / "argon_npt_compressed_uneven.tng" -).as_posix() -TNG_traj_vels_forces = ( - _data_ref / "argon_npt_compressed_vels_forces.tng" -).as_posix() +TNG_traj_uneven_blocks = (_data_ref / "argon_npt_compressed_uneven.tng").as_posix() +TNG_traj_vels_forces = (_data_ref / "argon_npt_compressed_vels_forces.tng").as_posix() PDB_xvf = (_data_ref / "cobrotoxin.pdb").as_posix() TPR_xvf = (_data_ref / "cobrotoxin.tpr").as_posix() TPR_xvf_2024_4 = (_data_ref / "cobrotoxin_2024_4.tpr").as_posix() @@ -579,23 +563,13 @@ TPR510_bonded = (_data_ref / "tprs/all_bonded/dummy_5.1.tpr").as_posix() TPR2016_bonded = (_data_ref / "tprs/all_bonded/dummy_2016.tpr").as_posix() TPR2018_bonded = (_data_ref / "tprs/all_bonded/dummy_2018.tpr").as_posix() -TPR2019B3_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr" -).as_posix() -TPR2020B2_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr" -).as_posix() +TPR2019B3_bonded = (_data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr").as_posix() +TPR2020B2_bonded = (_data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr").as_posix() TPR2020_bonded = (_data_ref / "tprs/all_bonded/dummy_2020.tpr").as_posix() -TPR2020_double_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2020_double.tpr" -).as_posix() +TPR2020_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2020_double.tpr").as_posix() TPR2021_bonded = (_data_ref / "tprs/all_bonded/dummy_2021.tpr").as_posix() -TPR2021_double_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2021_double.tpr" -).as_posix() -TPR2022RC1_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr" -).as_posix() +TPR2021_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2021_double.tpr").as_posix() +TPR2022RC1_bonded = (_data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr").as_posix() TPR2023_bonded = (_data_ref / "tprs/all_bonded/dummy_2023.tpr").as_posix() TPR2024_bonded = (_data_ref / "tprs/all_bonded/dummy_2024.tpr").as_posix() TPR2024_4_bonded = (_data_ref / "tprs/all_bonded/dummy_2024_4.tpr").as_posix() @@ -728,9 +702,7 @@ mol2_molecule = (_data_ref / "mol2/Molecule.mol2").as_posix() mol2_ligand = (_data_ref / "mol2/Ligand.mol2").as_posix() mol2_broken_molecule = (_data_ref / "mol2/BrokenMolecule.mol2").as_posix() -mol2_comments_header = ( - _data_ref / "mol2/Molecule_comments_header.mol2" -).as_posix() +mol2_comments_header = (_data_ref / "mol2/Molecule_comments_header.mol2").as_posix() # MOL2 file without substructure field mol2_zinc = (_data_ref / "mol2/zinc_856218.mol2").as_posix() # MOL2 file without bonds @@ -742,12 +714,8 @@ capping_ace = (_data_ref / "capping/ace.pdb").as_posix() capping_nma = (_data_ref / "capping/nma.pdb").as_posix() -contacts_villin_folded = ( - _data_ref / "contacts/villin_folded.gro.bz2" -).as_posix() -contacts_villin_unfolded = ( - _data_ref / "contacts/villin_unfolded.gro.bz2" -).as_posix() +contacts_villin_folded = (_data_ref / "contacts/villin_folded.gro.bz2").as_posix() +contacts_villin_unfolded = (_data_ref / "contacts/villin_unfolded.gro.bz2").as_posix() contacts_file = (_data_ref / "contacts/2F4K_qlist5_remap.dat").as_posix() trz4data = (_data_ref / "lammps/datatest.trz").as_posix() @@ -765,33 +733,23 @@ LAMMPSDUMP = (_data_ref / "lammps/wat.lammpstrj.bz2").as_posix() LAMMPSDUMP_long = (_data_ref / "lammps/wat.lammpstrj_long.bz2").as_posix() LAMMPSDUMP_allinfo = (_data_ref / "lammps/mass_q_elem.lammpstrj").as_posix() -LAMMPSDUMP_nomass_elemx = ( - _data_ref / "lammps/nomass_elemx.lammpstrj" -).as_posix() -LAMMPSDUMP_allcoords = ( - _data_ref / "lammps/spce_all_coords.lammpstrj.bz2" -).as_posix() -LAMMPSDUMP_nocoords = ( - _data_ref / "lammps/spce_no_coords.lammpstrj.bz2" -).as_posix() +LAMMPSDUMP_nomass_elemx = (_data_ref / "lammps/nomass_elemx.lammpstrj").as_posix() +LAMMPSDUMP_allcoords = (_data_ref / "lammps/spce_all_coords.lammpstrj.bz2").as_posix() +LAMMPSDUMP_nocoords = (_data_ref / "lammps/spce_no_coords.lammpstrj.bz2").as_posix() LAMMPSDUMP_triclinic = (_data_ref / "lammps/albite_triclinic.dump").as_posix() LAMMPSDUMP_image_vf = (_data_ref / "lammps/image_vf.lammpstrj").as_posix() LAMMPS_image_vf = (_data_ref / "lammps/image_vf.data").as_posix() LAMMPSDUMP_chain1 = (_data_ref / "lammps/chain_dump_1.lammpstrj").as_posix() LAMMPSDUMP_chain2 = (_data_ref / "lammps/chain_dump_2.lammpstrj").as_posix() LAMMPS_chain = (_data_ref / "lammps/chain_initial.data").as_posix() -LAMMPSdata_many_bonds = ( - _data_ref / "lammps/a_lot_of_bond_types.data" -).as_posix() +LAMMPSdata_many_bonds = (_data_ref / "lammps/a_lot_of_bond_types.data").as_posix() LAMMPSdata_additional_columns = ( _data_ref / "lammps/additional_columns.data" ).as_posix() LAMMPSDUMP_additional_columns = ( _data_ref / "lammps/additional_columns.lammpstrj" ).as_posix() -LAMMPSDUMP_non_linear = ( - _data_ref / "analysis/msd/test_non_linear.dump.bz2" -).as_posix() +LAMMPSDUMP_non_linear = (_data_ref / "analysis/msd/test_non_linear.dump.bz2").as_posix() unordered_res = (_data_ref / "unordered_res.pdb").as_posix() @@ -800,9 +758,7 @@ GMS_ASYMSURF = (_data_ref / "gms/surf2wat.gms").as_posix() two_water_gro = (_data_ref / "two_water_gro.gro").as_posix() -two_water_gro_multiframe = ( - _data_ref / "two_water_gro_multiframe.gro" -).as_posix() +two_water_gro_multiframe = (_data_ref / "two_water_gro_multiframe.gro").as_posix() two_water_gro_nonames = (_data_ref / "two_water_gro_nonames.gro").as_posix() two_water_gro_widebox = (_data_ref / "two_water_gro_widebox.gro").as_posix() @@ -812,9 +768,7 @@ DLP_HISTORY = (_data_ref / "dlpoly/HISTORY").as_posix() DLP_HISTORY_order = (_data_ref / "dlpoly/HISTORY_order").as_posix() DLP_HISTORY_minimal = (_data_ref / "dlpoly/HISTORY_minimal").as_posix() -DLP_HISTORY_minimal_cell = ( - _data_ref / "dlpoly/HISTORY_minimal_cell" -).as_posix() +DLP_HISTORY_minimal_cell = (_data_ref / "dlpoly/HISTORY_minimal_cell").as_posix() DLP_HISTORY_classic = (_data_ref / "dlpoly/HISTORY_classic").as_posix() waterPSF = (_data_ref / "watdyn.psf").as_posix() @@ -863,21 +817,11 @@ TRC_TRAJ2_VAC = (_data_ref / "gromos11/gromos11_traj_vac_2.trc.gz").as_posix() TRC_PDB_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.pdb.gz").as_posix() TRC_TRAJ_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.trc.gz").as_posix() -TRC_CLUSTER_VAC = ( - _data_ref / "gromos11/gromos11_cluster_vac.trj.gz" -).as_posix() -TRC_TRICLINIC_SOLV = ( - _data_ref / "gromos11/gromos11_triclinic_solv.trc.gz" -).as_posix() -TRC_TRUNCOCT_VAC = ( - _data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz" -).as_posix() -TRC_GENBOX_ORIGIN = ( - _data_ref / "gromos11/gromos11_genbox_origin.trc.gz" -).as_posix() -TRC_GENBOX_EULER = ( - _data_ref / "gromos11/gromos11_genbox_euler.trc.gz" -).as_posix() +TRC_CLUSTER_VAC = (_data_ref / "gromos11/gromos11_cluster_vac.trj.gz").as_posix() +TRC_TRICLINIC_SOLV = (_data_ref / "gromos11/gromos11_triclinic_solv.trc.gz").as_posix() +TRC_TRUNCOCT_VAC = (_data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz").as_posix() +TRC_GENBOX_ORIGIN = (_data_ref / "gromos11/gromos11_genbox_origin.trc.gz").as_posix() +TRC_GENBOX_EULER = (_data_ref / "gromos11/gromos11_genbox_euler.trc.gz").as_posix() TRC_EMPTY = (_data_ref / "gromos11/gromos11_empty.trc").as_posix() DihedralArray = (_data_ref / "adk_oplsaa_dihedral.npy").as_posix() From 5a0f7fc1019918e54a1b8ebe06656950ac7a442f Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 23 Dec 2025 21:58:22 +0530 Subject: [PATCH 04/10] fix: add mol2_crysin to __all__ exports and format --- testsuite/MDAnalysisTests/datafiles.py | 113 +++++++++++++++++++------ 1 file changed, 85 insertions(+), 28 deletions(-) diff --git a/testsuite/MDAnalysisTests/datafiles.py b/testsuite/MDAnalysisTests/datafiles.py index a068d9cf10a..35f6bf38480 100644 --- a/testsuite/MDAnalysisTests/datafiles.py +++ b/testsuite/MDAnalysisTests/datafiles.py @@ -241,6 +241,7 @@ "mol2_comments_header", "mol2_ligand", "mol2_sodium_ion", + "mol2_crysin", "capping_input", "capping_output", "capping_ace", @@ -399,7 +400,9 @@ _data_ref = resources.files("MDAnalysisTests.data") -WIN_PDB_multiframe = (_data_ref / "windows/WIN_nmr_neopetrosiamide.pdb").as_posix() +WIN_PDB_multiframe = ( + _data_ref / "windows/WIN_nmr_neopetrosiamide.pdb" +).as_posix() WIN_DLP_HISTORY = (_data_ref / "windows/WIN_HISTORY").as_posix() WIN_TRJ = (_data_ref / "windows/WIN_ache.mdcrd").as_posix() WIN_ARC = (_data_ref / "windows/WIN_test.arc").as_posix() @@ -448,7 +451,9 @@ PSF_NAMD = (_data_ref / "namd_cgenff.psf").as_posix() PDB_NAMD = (_data_ref / "namd_cgenff.pdb").as_posix() -PDB_multipole = (_data_ref / "water_methane_acetic-acid_ammonia.pdb").as_posix() +PDB_multipole = ( + _data_ref / "water_methane_acetic-acid_ammonia.pdb" +).as_posix() PSF_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.psf").as_posix() DCD_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.dcd").as_posix() PSF_NAMD_GBIS = (_data_ref / "adk_closed_NAMD.psf").as_posix() @@ -476,7 +481,9 @@ PDB_mc_gz = (_data_ref / "model_then_cryst.pdb.gz").as_posix() PDB_mc_bz2 = (_data_ref / "model_then_cryst.pdb.bz2").as_posix() PDB_chainidnewres = (_data_ref / "chainIDnewres.pdb.gz").as_posix() -PDB_sameresid_diffresname = (_data_ref / "sameresid_diffresname.pdb").as_posix() +PDB_sameresid_diffresname = ( + _data_ref / "sameresid_diffresname.pdb" +).as_posix() PDB_chainidrepeat = (_data_ref / "chainIDrepeat.pdb.gz").as_posix() PDB_multiframe = (_data_ref / "nmr_neopetrosiamide.pdb").as_posix() PDB_helix = (_data_ref / "A6PA6_alpha.pdb").as_posix() @@ -494,7 +501,9 @@ GRO_large = (_data_ref / "bigbox.gro.bz2").as_posix() GRO_residwrap = (_data_ref / "residwrap.gro").as_posix() GRO_residwrap_0base = (_data_ref / "residwrap_0base.gro").as_posix() -GRO_sameresid_diffresname = (_data_ref / "sameresid_diffresname.gro").as_posix() +GRO_sameresid_diffresname = ( + _data_ref / "sameresid_diffresname.gro" +).as_posix() PDB = (_data_ref / "adk_oplsaa.pdb").as_posix() XTC = (_data_ref / "adk_oplsaa.xtc").as_posix() TRR = (_data_ref / "adk_oplsaa.trr").as_posix() @@ -506,12 +515,20 @@ PDB_xlserial = (_data_ref / "xl_serial.pdb").as_posix() GRO_MEMPROT = (_data_ref / "analysis/YiiP_lipids.gro.gz").as_posix() XTC_MEMPROT = (_data_ref / "analysis/YiiP_lipids.xtc").as_posix() -XTC_multi_frame = (_data_ref / "xtc_test_only_10_frame_10_atoms.xtc").as_posix() -TRR_multi_frame = (_data_ref / "trr_test_only_10_frame_10_atoms.trr").as_posix() +XTC_multi_frame = ( + _data_ref / "xtc_test_only_10_frame_10_atoms.xtc" +).as_posix() +TRR_multi_frame = ( + _data_ref / "trr_test_only_10_frame_10_atoms.trr" +).as_posix() TNG_traj = (_data_ref / "argon_npt_compressed.tng").as_posix() TNG_traj_gro = (_data_ref / "argon_npt_compressed.gro.gz").as_posix() -TNG_traj_uneven_blocks = (_data_ref / "argon_npt_compressed_uneven.tng").as_posix() -TNG_traj_vels_forces = (_data_ref / "argon_npt_compressed_vels_forces.tng").as_posix() +TNG_traj_uneven_blocks = ( + _data_ref / "argon_npt_compressed_uneven.tng" +).as_posix() +TNG_traj_vels_forces = ( + _data_ref / "argon_npt_compressed_vels_forces.tng" +).as_posix() PDB_xvf = (_data_ref / "cobrotoxin.pdb").as_posix() TPR_xvf = (_data_ref / "cobrotoxin.tpr").as_posix() TPR_xvf_2024_4 = (_data_ref / "cobrotoxin_2024_4.tpr").as_posix() @@ -563,13 +580,23 @@ TPR510_bonded = (_data_ref / "tprs/all_bonded/dummy_5.1.tpr").as_posix() TPR2016_bonded = (_data_ref / "tprs/all_bonded/dummy_2016.tpr").as_posix() TPR2018_bonded = (_data_ref / "tprs/all_bonded/dummy_2018.tpr").as_posix() -TPR2019B3_bonded = (_data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr").as_posix() -TPR2020B2_bonded = (_data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr").as_posix() +TPR2019B3_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr" +).as_posix() +TPR2020B2_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr" +).as_posix() TPR2020_bonded = (_data_ref / "tprs/all_bonded/dummy_2020.tpr").as_posix() -TPR2020_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2020_double.tpr").as_posix() +TPR2020_double_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2020_double.tpr" +).as_posix() TPR2021_bonded = (_data_ref / "tprs/all_bonded/dummy_2021.tpr").as_posix() -TPR2021_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2021_double.tpr").as_posix() -TPR2022RC1_bonded = (_data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr").as_posix() +TPR2021_double_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2021_double.tpr" +).as_posix() +TPR2022RC1_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr" +).as_posix() TPR2023_bonded = (_data_ref / "tprs/all_bonded/dummy_2023.tpr").as_posix() TPR2024_bonded = (_data_ref / "tprs/all_bonded/dummy_2024.tpr").as_posix() TPR2024_4_bonded = (_data_ref / "tprs/all_bonded/dummy_2024_4.tpr").as_posix() @@ -702,7 +729,9 @@ mol2_molecule = (_data_ref / "mol2/Molecule.mol2").as_posix() mol2_ligand = (_data_ref / "mol2/Ligand.mol2").as_posix() mol2_broken_molecule = (_data_ref / "mol2/BrokenMolecule.mol2").as_posix() -mol2_comments_header = (_data_ref / "mol2/Molecule_comments_header.mol2").as_posix() +mol2_comments_header = ( + _data_ref / "mol2/Molecule_comments_header.mol2" +).as_posix() # MOL2 file without substructure field mol2_zinc = (_data_ref / "mol2/zinc_856218.mol2").as_posix() # MOL2 file without bonds @@ -714,8 +743,12 @@ capping_ace = (_data_ref / "capping/ace.pdb").as_posix() capping_nma = (_data_ref / "capping/nma.pdb").as_posix() -contacts_villin_folded = (_data_ref / "contacts/villin_folded.gro.bz2").as_posix() -contacts_villin_unfolded = (_data_ref / "contacts/villin_unfolded.gro.bz2").as_posix() +contacts_villin_folded = ( + _data_ref / "contacts/villin_folded.gro.bz2" +).as_posix() +contacts_villin_unfolded = ( + _data_ref / "contacts/villin_unfolded.gro.bz2" +).as_posix() contacts_file = (_data_ref / "contacts/2F4K_qlist5_remap.dat").as_posix() trz4data = (_data_ref / "lammps/datatest.trz").as_posix() @@ -733,23 +766,33 @@ LAMMPSDUMP = (_data_ref / "lammps/wat.lammpstrj.bz2").as_posix() LAMMPSDUMP_long = (_data_ref / "lammps/wat.lammpstrj_long.bz2").as_posix() LAMMPSDUMP_allinfo = (_data_ref / "lammps/mass_q_elem.lammpstrj").as_posix() -LAMMPSDUMP_nomass_elemx = (_data_ref / "lammps/nomass_elemx.lammpstrj").as_posix() -LAMMPSDUMP_allcoords = (_data_ref / "lammps/spce_all_coords.lammpstrj.bz2").as_posix() -LAMMPSDUMP_nocoords = (_data_ref / "lammps/spce_no_coords.lammpstrj.bz2").as_posix() +LAMMPSDUMP_nomass_elemx = ( + _data_ref / "lammps/nomass_elemx.lammpstrj" +).as_posix() +LAMMPSDUMP_allcoords = ( + _data_ref / "lammps/spce_all_coords.lammpstrj.bz2" +).as_posix() +LAMMPSDUMP_nocoords = ( + _data_ref / "lammps/spce_no_coords.lammpstrj.bz2" +).as_posix() LAMMPSDUMP_triclinic = (_data_ref / "lammps/albite_triclinic.dump").as_posix() LAMMPSDUMP_image_vf = (_data_ref / "lammps/image_vf.lammpstrj").as_posix() LAMMPS_image_vf = (_data_ref / "lammps/image_vf.data").as_posix() LAMMPSDUMP_chain1 = (_data_ref / "lammps/chain_dump_1.lammpstrj").as_posix() LAMMPSDUMP_chain2 = (_data_ref / "lammps/chain_dump_2.lammpstrj").as_posix() LAMMPS_chain = (_data_ref / "lammps/chain_initial.data").as_posix() -LAMMPSdata_many_bonds = (_data_ref / "lammps/a_lot_of_bond_types.data").as_posix() +LAMMPSdata_many_bonds = ( + _data_ref / "lammps/a_lot_of_bond_types.data" +).as_posix() LAMMPSdata_additional_columns = ( _data_ref / "lammps/additional_columns.data" ).as_posix() LAMMPSDUMP_additional_columns = ( _data_ref / "lammps/additional_columns.lammpstrj" ).as_posix() -LAMMPSDUMP_non_linear = (_data_ref / "analysis/msd/test_non_linear.dump.bz2").as_posix() +LAMMPSDUMP_non_linear = ( + _data_ref / "analysis/msd/test_non_linear.dump.bz2" +).as_posix() unordered_res = (_data_ref / "unordered_res.pdb").as_posix() @@ -758,7 +801,9 @@ GMS_ASYMSURF = (_data_ref / "gms/surf2wat.gms").as_posix() two_water_gro = (_data_ref / "two_water_gro.gro").as_posix() -two_water_gro_multiframe = (_data_ref / "two_water_gro_multiframe.gro").as_posix() +two_water_gro_multiframe = ( + _data_ref / "two_water_gro_multiframe.gro" +).as_posix() two_water_gro_nonames = (_data_ref / "two_water_gro_nonames.gro").as_posix() two_water_gro_widebox = (_data_ref / "two_water_gro_widebox.gro").as_posix() @@ -768,7 +813,9 @@ DLP_HISTORY = (_data_ref / "dlpoly/HISTORY").as_posix() DLP_HISTORY_order = (_data_ref / "dlpoly/HISTORY_order").as_posix() DLP_HISTORY_minimal = (_data_ref / "dlpoly/HISTORY_minimal").as_posix() -DLP_HISTORY_minimal_cell = (_data_ref / "dlpoly/HISTORY_minimal_cell").as_posix() +DLP_HISTORY_minimal_cell = ( + _data_ref / "dlpoly/HISTORY_minimal_cell" +).as_posix() DLP_HISTORY_classic = (_data_ref / "dlpoly/HISTORY_classic").as_posix() waterPSF = (_data_ref / "watdyn.psf").as_posix() @@ -817,11 +864,21 @@ TRC_TRAJ2_VAC = (_data_ref / "gromos11/gromos11_traj_vac_2.trc.gz").as_posix() TRC_PDB_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.pdb.gz").as_posix() TRC_TRAJ_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.trc.gz").as_posix() -TRC_CLUSTER_VAC = (_data_ref / "gromos11/gromos11_cluster_vac.trj.gz").as_posix() -TRC_TRICLINIC_SOLV = (_data_ref / "gromos11/gromos11_triclinic_solv.trc.gz").as_posix() -TRC_TRUNCOCT_VAC = (_data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz").as_posix() -TRC_GENBOX_ORIGIN = (_data_ref / "gromos11/gromos11_genbox_origin.trc.gz").as_posix() -TRC_GENBOX_EULER = (_data_ref / "gromos11/gromos11_genbox_euler.trc.gz").as_posix() +TRC_CLUSTER_VAC = ( + _data_ref / "gromos11/gromos11_cluster_vac.trj.gz" +).as_posix() +TRC_TRICLINIC_SOLV = ( + _data_ref / "gromos11/gromos11_triclinic_solv.trc.gz" +).as_posix() +TRC_TRUNCOCT_VAC = ( + _data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz" +).as_posix() +TRC_GENBOX_ORIGIN = ( + _data_ref / "gromos11/gromos11_genbox_origin.trc.gz" +).as_posix() +TRC_GENBOX_EULER = ( + _data_ref / "gromos11/gromos11_genbox_euler.trc.gz" +).as_posix() TRC_EMPTY = (_data_ref / "gromos11/gromos11_empty.trc").as_posix() DihedralArray = (_data_ref / "adk_oplsaa_dihedral.npy").as_posix() From a4425f07a98b549346b6ccfb9118285a19427c08 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 23 Dec 2025 22:22:58 +0530 Subject: [PATCH 05/10] style: run black v24 on all files --- testsuite/MDAnalysisTests/datafiles.py | 112 +++++++------------------ 1 file changed, 28 insertions(+), 84 deletions(-) diff --git a/testsuite/MDAnalysisTests/datafiles.py b/testsuite/MDAnalysisTests/datafiles.py index 35f6bf38480..4bc3e721fa2 100644 --- a/testsuite/MDAnalysisTests/datafiles.py +++ b/testsuite/MDAnalysisTests/datafiles.py @@ -400,9 +400,7 @@ _data_ref = resources.files("MDAnalysisTests.data") -WIN_PDB_multiframe = ( - _data_ref / "windows/WIN_nmr_neopetrosiamide.pdb" -).as_posix() +WIN_PDB_multiframe = (_data_ref / "windows/WIN_nmr_neopetrosiamide.pdb").as_posix() WIN_DLP_HISTORY = (_data_ref / "windows/WIN_HISTORY").as_posix() WIN_TRJ = (_data_ref / "windows/WIN_ache.mdcrd").as_posix() WIN_ARC = (_data_ref / "windows/WIN_test.arc").as_posix() @@ -451,9 +449,7 @@ PSF_NAMD = (_data_ref / "namd_cgenff.psf").as_posix() PDB_NAMD = (_data_ref / "namd_cgenff.pdb").as_posix() -PDB_multipole = ( - _data_ref / "water_methane_acetic-acid_ammonia.pdb" -).as_posix() +PDB_multipole = (_data_ref / "water_methane_acetic-acid_ammonia.pdb").as_posix() PSF_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.psf").as_posix() DCD_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.dcd").as_posix() PSF_NAMD_GBIS = (_data_ref / "adk_closed_NAMD.psf").as_posix() @@ -481,9 +477,7 @@ PDB_mc_gz = (_data_ref / "model_then_cryst.pdb.gz").as_posix() PDB_mc_bz2 = (_data_ref / "model_then_cryst.pdb.bz2").as_posix() PDB_chainidnewres = (_data_ref / "chainIDnewres.pdb.gz").as_posix() -PDB_sameresid_diffresname = ( - _data_ref / "sameresid_diffresname.pdb" -).as_posix() +PDB_sameresid_diffresname = (_data_ref / "sameresid_diffresname.pdb").as_posix() PDB_chainidrepeat = (_data_ref / "chainIDrepeat.pdb.gz").as_posix() PDB_multiframe = (_data_ref / "nmr_neopetrosiamide.pdb").as_posix() PDB_helix = (_data_ref / "A6PA6_alpha.pdb").as_posix() @@ -501,9 +495,7 @@ GRO_large = (_data_ref / "bigbox.gro.bz2").as_posix() GRO_residwrap = (_data_ref / "residwrap.gro").as_posix() GRO_residwrap_0base = (_data_ref / "residwrap_0base.gro").as_posix() -GRO_sameresid_diffresname = ( - _data_ref / "sameresid_diffresname.gro" -).as_posix() +GRO_sameresid_diffresname = (_data_ref / "sameresid_diffresname.gro").as_posix() PDB = (_data_ref / "adk_oplsaa.pdb").as_posix() XTC = (_data_ref / "adk_oplsaa.xtc").as_posix() TRR = (_data_ref / "adk_oplsaa.trr").as_posix() @@ -515,20 +507,12 @@ PDB_xlserial = (_data_ref / "xl_serial.pdb").as_posix() GRO_MEMPROT = (_data_ref / "analysis/YiiP_lipids.gro.gz").as_posix() XTC_MEMPROT = (_data_ref / "analysis/YiiP_lipids.xtc").as_posix() -XTC_multi_frame = ( - _data_ref / "xtc_test_only_10_frame_10_atoms.xtc" -).as_posix() -TRR_multi_frame = ( - _data_ref / "trr_test_only_10_frame_10_atoms.trr" -).as_posix() +XTC_multi_frame = (_data_ref / "xtc_test_only_10_frame_10_atoms.xtc").as_posix() +TRR_multi_frame = (_data_ref / "trr_test_only_10_frame_10_atoms.trr").as_posix() TNG_traj = (_data_ref / "argon_npt_compressed.tng").as_posix() TNG_traj_gro = (_data_ref / "argon_npt_compressed.gro.gz").as_posix() -TNG_traj_uneven_blocks = ( - _data_ref / "argon_npt_compressed_uneven.tng" -).as_posix() -TNG_traj_vels_forces = ( - _data_ref / "argon_npt_compressed_vels_forces.tng" -).as_posix() +TNG_traj_uneven_blocks = (_data_ref / "argon_npt_compressed_uneven.tng").as_posix() +TNG_traj_vels_forces = (_data_ref / "argon_npt_compressed_vels_forces.tng").as_posix() PDB_xvf = (_data_ref / "cobrotoxin.pdb").as_posix() TPR_xvf = (_data_ref / "cobrotoxin.tpr").as_posix() TPR_xvf_2024_4 = (_data_ref / "cobrotoxin_2024_4.tpr").as_posix() @@ -580,23 +564,13 @@ TPR510_bonded = (_data_ref / "tprs/all_bonded/dummy_5.1.tpr").as_posix() TPR2016_bonded = (_data_ref / "tprs/all_bonded/dummy_2016.tpr").as_posix() TPR2018_bonded = (_data_ref / "tprs/all_bonded/dummy_2018.tpr").as_posix() -TPR2019B3_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr" -).as_posix() -TPR2020B2_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr" -).as_posix() +TPR2019B3_bonded = (_data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr").as_posix() +TPR2020B2_bonded = (_data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr").as_posix() TPR2020_bonded = (_data_ref / "tprs/all_bonded/dummy_2020.tpr").as_posix() -TPR2020_double_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2020_double.tpr" -).as_posix() +TPR2020_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2020_double.tpr").as_posix() TPR2021_bonded = (_data_ref / "tprs/all_bonded/dummy_2021.tpr").as_posix() -TPR2021_double_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2021_double.tpr" -).as_posix() -TPR2022RC1_bonded = ( - _data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr" -).as_posix() +TPR2021_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2021_double.tpr").as_posix() +TPR2022RC1_bonded = (_data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr").as_posix() TPR2023_bonded = (_data_ref / "tprs/all_bonded/dummy_2023.tpr").as_posix() TPR2024_bonded = (_data_ref / "tprs/all_bonded/dummy_2024.tpr").as_posix() TPR2024_4_bonded = (_data_ref / "tprs/all_bonded/dummy_2024_4.tpr").as_posix() @@ -729,9 +703,7 @@ mol2_molecule = (_data_ref / "mol2/Molecule.mol2").as_posix() mol2_ligand = (_data_ref / "mol2/Ligand.mol2").as_posix() mol2_broken_molecule = (_data_ref / "mol2/BrokenMolecule.mol2").as_posix() -mol2_comments_header = ( - _data_ref / "mol2/Molecule_comments_header.mol2" -).as_posix() +mol2_comments_header = (_data_ref / "mol2/Molecule_comments_header.mol2").as_posix() # MOL2 file without substructure field mol2_zinc = (_data_ref / "mol2/zinc_856218.mol2").as_posix() # MOL2 file without bonds @@ -743,12 +715,8 @@ capping_ace = (_data_ref / "capping/ace.pdb").as_posix() capping_nma = (_data_ref / "capping/nma.pdb").as_posix() -contacts_villin_folded = ( - _data_ref / "contacts/villin_folded.gro.bz2" -).as_posix() -contacts_villin_unfolded = ( - _data_ref / "contacts/villin_unfolded.gro.bz2" -).as_posix() +contacts_villin_folded = (_data_ref / "contacts/villin_folded.gro.bz2").as_posix() +contacts_villin_unfolded = (_data_ref / "contacts/villin_unfolded.gro.bz2").as_posix() contacts_file = (_data_ref / "contacts/2F4K_qlist5_remap.dat").as_posix() trz4data = (_data_ref / "lammps/datatest.trz").as_posix() @@ -766,33 +734,23 @@ LAMMPSDUMP = (_data_ref / "lammps/wat.lammpstrj.bz2").as_posix() LAMMPSDUMP_long = (_data_ref / "lammps/wat.lammpstrj_long.bz2").as_posix() LAMMPSDUMP_allinfo = (_data_ref / "lammps/mass_q_elem.lammpstrj").as_posix() -LAMMPSDUMP_nomass_elemx = ( - _data_ref / "lammps/nomass_elemx.lammpstrj" -).as_posix() -LAMMPSDUMP_allcoords = ( - _data_ref / "lammps/spce_all_coords.lammpstrj.bz2" -).as_posix() -LAMMPSDUMP_nocoords = ( - _data_ref / "lammps/spce_no_coords.lammpstrj.bz2" -).as_posix() +LAMMPSDUMP_nomass_elemx = (_data_ref / "lammps/nomass_elemx.lammpstrj").as_posix() +LAMMPSDUMP_allcoords = (_data_ref / "lammps/spce_all_coords.lammpstrj.bz2").as_posix() +LAMMPSDUMP_nocoords = (_data_ref / "lammps/spce_no_coords.lammpstrj.bz2").as_posix() LAMMPSDUMP_triclinic = (_data_ref / "lammps/albite_triclinic.dump").as_posix() LAMMPSDUMP_image_vf = (_data_ref / "lammps/image_vf.lammpstrj").as_posix() LAMMPS_image_vf = (_data_ref / "lammps/image_vf.data").as_posix() LAMMPSDUMP_chain1 = (_data_ref / "lammps/chain_dump_1.lammpstrj").as_posix() LAMMPSDUMP_chain2 = (_data_ref / "lammps/chain_dump_2.lammpstrj").as_posix() LAMMPS_chain = (_data_ref / "lammps/chain_initial.data").as_posix() -LAMMPSdata_many_bonds = ( - _data_ref / "lammps/a_lot_of_bond_types.data" -).as_posix() +LAMMPSdata_many_bonds = (_data_ref / "lammps/a_lot_of_bond_types.data").as_posix() LAMMPSdata_additional_columns = ( _data_ref / "lammps/additional_columns.data" ).as_posix() LAMMPSDUMP_additional_columns = ( _data_ref / "lammps/additional_columns.lammpstrj" ).as_posix() -LAMMPSDUMP_non_linear = ( - _data_ref / "analysis/msd/test_non_linear.dump.bz2" -).as_posix() +LAMMPSDUMP_non_linear = (_data_ref / "analysis/msd/test_non_linear.dump.bz2").as_posix() unordered_res = (_data_ref / "unordered_res.pdb").as_posix() @@ -801,9 +759,7 @@ GMS_ASYMSURF = (_data_ref / "gms/surf2wat.gms").as_posix() two_water_gro = (_data_ref / "two_water_gro.gro").as_posix() -two_water_gro_multiframe = ( - _data_ref / "two_water_gro_multiframe.gro" -).as_posix() +two_water_gro_multiframe = (_data_ref / "two_water_gro_multiframe.gro").as_posix() two_water_gro_nonames = (_data_ref / "two_water_gro_nonames.gro").as_posix() two_water_gro_widebox = (_data_ref / "two_water_gro_widebox.gro").as_posix() @@ -813,9 +769,7 @@ DLP_HISTORY = (_data_ref / "dlpoly/HISTORY").as_posix() DLP_HISTORY_order = (_data_ref / "dlpoly/HISTORY_order").as_posix() DLP_HISTORY_minimal = (_data_ref / "dlpoly/HISTORY_minimal").as_posix() -DLP_HISTORY_minimal_cell = ( - _data_ref / "dlpoly/HISTORY_minimal_cell" -).as_posix() +DLP_HISTORY_minimal_cell = (_data_ref / "dlpoly/HISTORY_minimal_cell").as_posix() DLP_HISTORY_classic = (_data_ref / "dlpoly/HISTORY_classic").as_posix() waterPSF = (_data_ref / "watdyn.psf").as_posix() @@ -864,21 +818,11 @@ TRC_TRAJ2_VAC = (_data_ref / "gromos11/gromos11_traj_vac_2.trc.gz").as_posix() TRC_PDB_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.pdb.gz").as_posix() TRC_TRAJ_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.trc.gz").as_posix() -TRC_CLUSTER_VAC = ( - _data_ref / "gromos11/gromos11_cluster_vac.trj.gz" -).as_posix() -TRC_TRICLINIC_SOLV = ( - _data_ref / "gromos11/gromos11_triclinic_solv.trc.gz" -).as_posix() -TRC_TRUNCOCT_VAC = ( - _data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz" -).as_posix() -TRC_GENBOX_ORIGIN = ( - _data_ref / "gromos11/gromos11_genbox_origin.trc.gz" -).as_posix() -TRC_GENBOX_EULER = ( - _data_ref / "gromos11/gromos11_genbox_euler.trc.gz" -).as_posix() +TRC_CLUSTER_VAC = (_data_ref / "gromos11/gromos11_cluster_vac.trj.gz").as_posix() +TRC_TRICLINIC_SOLV = (_data_ref / "gromos11/gromos11_triclinic_solv.trc.gz").as_posix() +TRC_TRUNCOCT_VAC = (_data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz").as_posix() +TRC_GENBOX_ORIGIN = (_data_ref / "gromos11/gromos11_genbox_origin.trc.gz").as_posix() +TRC_GENBOX_EULER = (_data_ref / "gromos11/gromos11_genbox_euler.trc.gz").as_posix() TRC_EMPTY = (_data_ref / "gromos11/gromos11_empty.trc").as_posix() DihedralArray = (_data_ref / "adk_oplsaa_dihedral.npy").as_posix() From 472d55e5fc2778e4d1b74b28cc219a8665f67328 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 23 Dec 2025 22:38:58 +0530 Subject: [PATCH 06/10] style: reformat MOL2.py to satisfy CI --- package/MDAnalysis/coordinates/MOL2.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/package/MDAnalysis/coordinates/MOL2.py b/package/MDAnalysis/coordinates/MOL2.py index 8a678e4efd8..a3a9d0e2bc9 100644 --- a/package/MDAnalysis/coordinates/MOL2.py +++ b/package/MDAnalysis/coordinates/MOL2.py @@ -233,7 +233,10 @@ def _read_frame(self, frame): try: block = self.frames[frame] except IndexError: - errmsg = f"Invalid frame {frame} for trajectory with length " f"{len(self)}" + errmsg = ( + f"Invalid frame {frame} for trajectory with length " + f"{len(self)}" + ) raise IOError(errmsg) from None sections, coords = self.parse_block(block) @@ -308,7 +311,9 @@ def __init__(self, filename, n_atoms=None, convert_units=True): units are converted to the MDAnalysis base format; [``True``] """ self.filename = filename - self.convert_units = convert_units # convert length and time to base units + self.convert_units = ( + convert_units # convert length and time to base units + ) self.frames_written = 0 @@ -383,7 +388,9 @@ def encode_block(self, obj): atom_lines = "\n".join(atom_lines) try: - substructure = ["@SUBSTRUCTURE\n"] + ts.data["substructure"] + substructure = ["@SUBSTRUCTURE\n"] + ts.data[ + "substructure" + ] except KeyError: substructure = "" @@ -398,7 +405,9 @@ def encode_block(self, obj): molecule[1] = "{0}\n".format(" ".join(check_sums)) molecule.insert(0, "@MOLECULE\n") - return_val = "".join(molecule) + atom_lines + bond_lines + "".join(substructure) + return_val = ( + "".join(molecule) + atom_lines + bond_lines + "".join(substructure) + ) molecule[0] = molecule_0_store molecule[1] = molecule_1_store From a07de611aacd458aecbd05969c65947bc423bfc3 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 23 Dec 2025 22:50:59 +0530 Subject: [PATCH 07/10] style: black formatting for tests and datafiles --- .../MDAnalysisTests/coordinates/test_mol2.py | 12 +- testsuite/MDAnalysisTests/datafiles.py | 112 +++++++++++++----- 2 files changed, 93 insertions(+), 31 deletions(-) diff --git a/testsuite/MDAnalysisTests/coordinates/test_mol2.py b/testsuite/MDAnalysisTests/coordinates/test_mol2.py index 2355f119b61..fb1ed961f5b 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_mol2.py +++ b/testsuite/MDAnalysisTests/coordinates/test_mol2.py @@ -57,7 +57,9 @@ def test_read(self): assert_equal(u.trajectory.n_frames, 200) u.trajectory[199] - assert_array_almost_equal(u.atoms.positions[0], [1.7240, 11.2730, 14.1200]) + assert_array_almost_equal( + u.atoms.positions[0], [1.7240, 11.2730, 14.1200] + ) def test_read_statusbit(self): u = Universe(mol2_ligand) @@ -113,7 +115,9 @@ def test_comments_header(self): assert_equal(len(u.atoms), 9) assert_equal(u.trajectory.n_frames, 2) u.trajectory[1] - assert_array_almost_equal(u.atoms.positions[2], [-12.2710, -1.9540, -16.0480]) + assert_array_almost_equal( + u.atoms.positions[2], [-12.2710, -1.9540, -16.0480] + ) def test_no_bonds(self, tmpdir): # Issue #3057 @@ -161,7 +165,9 @@ def test_slice_traj(self): def test_reverse_traj(self): frames = [ts.frame for ts in self.traj[20:5:-1]] - assert_equal(frames, list(range(20, 5, -1)), "reversing traj [20:5:-1]") + assert_equal( + frames, list(range(20, 5, -1)), "reversing traj [20:5:-1]" + ) def test_n_frames(self): assert_equal( diff --git a/testsuite/MDAnalysisTests/datafiles.py b/testsuite/MDAnalysisTests/datafiles.py index 4bc3e721fa2..35f6bf38480 100644 --- a/testsuite/MDAnalysisTests/datafiles.py +++ b/testsuite/MDAnalysisTests/datafiles.py @@ -400,7 +400,9 @@ _data_ref = resources.files("MDAnalysisTests.data") -WIN_PDB_multiframe = (_data_ref / "windows/WIN_nmr_neopetrosiamide.pdb").as_posix() +WIN_PDB_multiframe = ( + _data_ref / "windows/WIN_nmr_neopetrosiamide.pdb" +).as_posix() WIN_DLP_HISTORY = (_data_ref / "windows/WIN_HISTORY").as_posix() WIN_TRJ = (_data_ref / "windows/WIN_ache.mdcrd").as_posix() WIN_ARC = (_data_ref / "windows/WIN_test.arc").as_posix() @@ -449,7 +451,9 @@ PSF_NAMD = (_data_ref / "namd_cgenff.psf").as_posix() PDB_NAMD = (_data_ref / "namd_cgenff.pdb").as_posix() -PDB_multipole = (_data_ref / "water_methane_acetic-acid_ammonia.pdb").as_posix() +PDB_multipole = ( + _data_ref / "water_methane_acetic-acid_ammonia.pdb" +).as_posix() PSF_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.psf").as_posix() DCD_NAMD_TRICLINIC = (_data_ref / "SiN_tric_namd.dcd").as_posix() PSF_NAMD_GBIS = (_data_ref / "adk_closed_NAMD.psf").as_posix() @@ -477,7 +481,9 @@ PDB_mc_gz = (_data_ref / "model_then_cryst.pdb.gz").as_posix() PDB_mc_bz2 = (_data_ref / "model_then_cryst.pdb.bz2").as_posix() PDB_chainidnewres = (_data_ref / "chainIDnewres.pdb.gz").as_posix() -PDB_sameresid_diffresname = (_data_ref / "sameresid_diffresname.pdb").as_posix() +PDB_sameresid_diffresname = ( + _data_ref / "sameresid_diffresname.pdb" +).as_posix() PDB_chainidrepeat = (_data_ref / "chainIDrepeat.pdb.gz").as_posix() PDB_multiframe = (_data_ref / "nmr_neopetrosiamide.pdb").as_posix() PDB_helix = (_data_ref / "A6PA6_alpha.pdb").as_posix() @@ -495,7 +501,9 @@ GRO_large = (_data_ref / "bigbox.gro.bz2").as_posix() GRO_residwrap = (_data_ref / "residwrap.gro").as_posix() GRO_residwrap_0base = (_data_ref / "residwrap_0base.gro").as_posix() -GRO_sameresid_diffresname = (_data_ref / "sameresid_diffresname.gro").as_posix() +GRO_sameresid_diffresname = ( + _data_ref / "sameresid_diffresname.gro" +).as_posix() PDB = (_data_ref / "adk_oplsaa.pdb").as_posix() XTC = (_data_ref / "adk_oplsaa.xtc").as_posix() TRR = (_data_ref / "adk_oplsaa.trr").as_posix() @@ -507,12 +515,20 @@ PDB_xlserial = (_data_ref / "xl_serial.pdb").as_posix() GRO_MEMPROT = (_data_ref / "analysis/YiiP_lipids.gro.gz").as_posix() XTC_MEMPROT = (_data_ref / "analysis/YiiP_lipids.xtc").as_posix() -XTC_multi_frame = (_data_ref / "xtc_test_only_10_frame_10_atoms.xtc").as_posix() -TRR_multi_frame = (_data_ref / "trr_test_only_10_frame_10_atoms.trr").as_posix() +XTC_multi_frame = ( + _data_ref / "xtc_test_only_10_frame_10_atoms.xtc" +).as_posix() +TRR_multi_frame = ( + _data_ref / "trr_test_only_10_frame_10_atoms.trr" +).as_posix() TNG_traj = (_data_ref / "argon_npt_compressed.tng").as_posix() TNG_traj_gro = (_data_ref / "argon_npt_compressed.gro.gz").as_posix() -TNG_traj_uneven_blocks = (_data_ref / "argon_npt_compressed_uneven.tng").as_posix() -TNG_traj_vels_forces = (_data_ref / "argon_npt_compressed_vels_forces.tng").as_posix() +TNG_traj_uneven_blocks = ( + _data_ref / "argon_npt_compressed_uneven.tng" +).as_posix() +TNG_traj_vels_forces = ( + _data_ref / "argon_npt_compressed_vels_forces.tng" +).as_posix() PDB_xvf = (_data_ref / "cobrotoxin.pdb").as_posix() TPR_xvf = (_data_ref / "cobrotoxin.tpr").as_posix() TPR_xvf_2024_4 = (_data_ref / "cobrotoxin_2024_4.tpr").as_posix() @@ -564,13 +580,23 @@ TPR510_bonded = (_data_ref / "tprs/all_bonded/dummy_5.1.tpr").as_posix() TPR2016_bonded = (_data_ref / "tprs/all_bonded/dummy_2016.tpr").as_posix() TPR2018_bonded = (_data_ref / "tprs/all_bonded/dummy_2018.tpr").as_posix() -TPR2019B3_bonded = (_data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr").as_posix() -TPR2020B2_bonded = (_data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr").as_posix() +TPR2019B3_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2019-beta3.tpr" +).as_posix() +TPR2020B2_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2020-beta2.tpr" +).as_posix() TPR2020_bonded = (_data_ref / "tprs/all_bonded/dummy_2020.tpr").as_posix() -TPR2020_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2020_double.tpr").as_posix() +TPR2020_double_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2020_double.tpr" +).as_posix() TPR2021_bonded = (_data_ref / "tprs/all_bonded/dummy_2021.tpr").as_posix() -TPR2021_double_bonded = (_data_ref / "tprs/all_bonded/dummy_2021_double.tpr").as_posix() -TPR2022RC1_bonded = (_data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr").as_posix() +TPR2021_double_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2021_double.tpr" +).as_posix() +TPR2022RC1_bonded = ( + _data_ref / "tprs/all_bonded/dummy_2022-rc1.tpr" +).as_posix() TPR2023_bonded = (_data_ref / "tprs/all_bonded/dummy_2023.tpr").as_posix() TPR2024_bonded = (_data_ref / "tprs/all_bonded/dummy_2024.tpr").as_posix() TPR2024_4_bonded = (_data_ref / "tprs/all_bonded/dummy_2024_4.tpr").as_posix() @@ -703,7 +729,9 @@ mol2_molecule = (_data_ref / "mol2/Molecule.mol2").as_posix() mol2_ligand = (_data_ref / "mol2/Ligand.mol2").as_posix() mol2_broken_molecule = (_data_ref / "mol2/BrokenMolecule.mol2").as_posix() -mol2_comments_header = (_data_ref / "mol2/Molecule_comments_header.mol2").as_posix() +mol2_comments_header = ( + _data_ref / "mol2/Molecule_comments_header.mol2" +).as_posix() # MOL2 file without substructure field mol2_zinc = (_data_ref / "mol2/zinc_856218.mol2").as_posix() # MOL2 file without bonds @@ -715,8 +743,12 @@ capping_ace = (_data_ref / "capping/ace.pdb").as_posix() capping_nma = (_data_ref / "capping/nma.pdb").as_posix() -contacts_villin_folded = (_data_ref / "contacts/villin_folded.gro.bz2").as_posix() -contacts_villin_unfolded = (_data_ref / "contacts/villin_unfolded.gro.bz2").as_posix() +contacts_villin_folded = ( + _data_ref / "contacts/villin_folded.gro.bz2" +).as_posix() +contacts_villin_unfolded = ( + _data_ref / "contacts/villin_unfolded.gro.bz2" +).as_posix() contacts_file = (_data_ref / "contacts/2F4K_qlist5_remap.dat").as_posix() trz4data = (_data_ref / "lammps/datatest.trz").as_posix() @@ -734,23 +766,33 @@ LAMMPSDUMP = (_data_ref / "lammps/wat.lammpstrj.bz2").as_posix() LAMMPSDUMP_long = (_data_ref / "lammps/wat.lammpstrj_long.bz2").as_posix() LAMMPSDUMP_allinfo = (_data_ref / "lammps/mass_q_elem.lammpstrj").as_posix() -LAMMPSDUMP_nomass_elemx = (_data_ref / "lammps/nomass_elemx.lammpstrj").as_posix() -LAMMPSDUMP_allcoords = (_data_ref / "lammps/spce_all_coords.lammpstrj.bz2").as_posix() -LAMMPSDUMP_nocoords = (_data_ref / "lammps/spce_no_coords.lammpstrj.bz2").as_posix() +LAMMPSDUMP_nomass_elemx = ( + _data_ref / "lammps/nomass_elemx.lammpstrj" +).as_posix() +LAMMPSDUMP_allcoords = ( + _data_ref / "lammps/spce_all_coords.lammpstrj.bz2" +).as_posix() +LAMMPSDUMP_nocoords = ( + _data_ref / "lammps/spce_no_coords.lammpstrj.bz2" +).as_posix() LAMMPSDUMP_triclinic = (_data_ref / "lammps/albite_triclinic.dump").as_posix() LAMMPSDUMP_image_vf = (_data_ref / "lammps/image_vf.lammpstrj").as_posix() LAMMPS_image_vf = (_data_ref / "lammps/image_vf.data").as_posix() LAMMPSDUMP_chain1 = (_data_ref / "lammps/chain_dump_1.lammpstrj").as_posix() LAMMPSDUMP_chain2 = (_data_ref / "lammps/chain_dump_2.lammpstrj").as_posix() LAMMPS_chain = (_data_ref / "lammps/chain_initial.data").as_posix() -LAMMPSdata_many_bonds = (_data_ref / "lammps/a_lot_of_bond_types.data").as_posix() +LAMMPSdata_many_bonds = ( + _data_ref / "lammps/a_lot_of_bond_types.data" +).as_posix() LAMMPSdata_additional_columns = ( _data_ref / "lammps/additional_columns.data" ).as_posix() LAMMPSDUMP_additional_columns = ( _data_ref / "lammps/additional_columns.lammpstrj" ).as_posix() -LAMMPSDUMP_non_linear = (_data_ref / "analysis/msd/test_non_linear.dump.bz2").as_posix() +LAMMPSDUMP_non_linear = ( + _data_ref / "analysis/msd/test_non_linear.dump.bz2" +).as_posix() unordered_res = (_data_ref / "unordered_res.pdb").as_posix() @@ -759,7 +801,9 @@ GMS_ASYMSURF = (_data_ref / "gms/surf2wat.gms").as_posix() two_water_gro = (_data_ref / "two_water_gro.gro").as_posix() -two_water_gro_multiframe = (_data_ref / "two_water_gro_multiframe.gro").as_posix() +two_water_gro_multiframe = ( + _data_ref / "two_water_gro_multiframe.gro" +).as_posix() two_water_gro_nonames = (_data_ref / "two_water_gro_nonames.gro").as_posix() two_water_gro_widebox = (_data_ref / "two_water_gro_widebox.gro").as_posix() @@ -769,7 +813,9 @@ DLP_HISTORY = (_data_ref / "dlpoly/HISTORY").as_posix() DLP_HISTORY_order = (_data_ref / "dlpoly/HISTORY_order").as_posix() DLP_HISTORY_minimal = (_data_ref / "dlpoly/HISTORY_minimal").as_posix() -DLP_HISTORY_minimal_cell = (_data_ref / "dlpoly/HISTORY_minimal_cell").as_posix() +DLP_HISTORY_minimal_cell = ( + _data_ref / "dlpoly/HISTORY_minimal_cell" +).as_posix() DLP_HISTORY_classic = (_data_ref / "dlpoly/HISTORY_classic").as_posix() waterPSF = (_data_ref / "watdyn.psf").as_posix() @@ -818,11 +864,21 @@ TRC_TRAJ2_VAC = (_data_ref / "gromos11/gromos11_traj_vac_2.trc.gz").as_posix() TRC_PDB_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.pdb.gz").as_posix() TRC_TRAJ_SOLV = (_data_ref / "gromos11/gromos11_traj_solv.trc.gz").as_posix() -TRC_CLUSTER_VAC = (_data_ref / "gromos11/gromos11_cluster_vac.trj.gz").as_posix() -TRC_TRICLINIC_SOLV = (_data_ref / "gromos11/gromos11_triclinic_solv.trc.gz").as_posix() -TRC_TRUNCOCT_VAC = (_data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz").as_posix() -TRC_GENBOX_ORIGIN = (_data_ref / "gromos11/gromos11_genbox_origin.trc.gz").as_posix() -TRC_GENBOX_EULER = (_data_ref / "gromos11/gromos11_genbox_euler.trc.gz").as_posix() +TRC_CLUSTER_VAC = ( + _data_ref / "gromos11/gromos11_cluster_vac.trj.gz" +).as_posix() +TRC_TRICLINIC_SOLV = ( + _data_ref / "gromos11/gromos11_triclinic_solv.trc.gz" +).as_posix() +TRC_TRUNCOCT_VAC = ( + _data_ref / "gromos11/gromos11_truncOcta_vac.trc.gz" +).as_posix() +TRC_GENBOX_ORIGIN = ( + _data_ref / "gromos11/gromos11_genbox_origin.trc.gz" +).as_posix() +TRC_GENBOX_EULER = ( + _data_ref / "gromos11/gromos11_genbox_euler.trc.gz" +).as_posix() TRC_EMPTY = (_data_ref / "gromos11/gromos11_empty.trc").as_posix() DihedralArray = (_data_ref / "adk_oplsaa_dihedral.npy").as_posix() From 593995ead34303d96b77cabe5a0899d9e23549f7 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Fri, 16 Jan 2026 18:26:27 +0530 Subject: [PATCH 08/10] docs: update changelog, authors, and parser docstrings --- package/AUTHORS | 1 + package/CHANGELOG | 1 + package/MDAnalysis/coordinates/MOL2.py | 11 +++++++---- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/package/AUTHORS b/package/AUTHORS index e23f2afcf2c..d834aa66f01 100644 --- a/package/AUTHORS +++ b/package/AUTHORS @@ -265,6 +265,7 @@ Chronological list of authors - Raúl Lois-Cuns - Pranay Pelapkar - Shreejan Dolai + - Kushagar garg External code ------------- diff --git a/package/CHANGELOG b/package/CHANGELOG index 642e717b851..1f9de906f88 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -223,6 +223,7 @@ Fixes * Fix doctest errors of lib/picklable_file_io.py (Issue #3925, PR #4371) * Fix deploy action to use the correct version of the pypi upload action. * Fix groups.py doctests using sphinx directives (Issue #3925, PR #4374) + * MOL2Parser now reads unit cell dimensions from @CRYSIN records (Issue #3341) Enhancements * Removed type and mass guessing from all topology parsers (PR #3753) diff --git a/package/MDAnalysis/coordinates/MOL2.py b/package/MDAnalysis/coordinates/MOL2.py index a3a9d0e2bc9..df052f8089c 100644 --- a/package/MDAnalysis/coordinates/MOL2.py +++ b/package/MDAnalysis/coordinates/MOL2.py @@ -241,15 +241,18 @@ def _read_frame(self, frame): sections, coords = self.parse_block(block) - if "crysin" in sections: - dims = sections["crysin"][0].split()[:6] - self.ts.dimensions = np.array(dims, dtype=np.float32) - for sect in ["molecule", "substructure"]: try: self.ts.data[sect] = sections[sect] except KeyError: pass + if "crysin" in sections: + try: + line = sections["crysin"][0].strip() + dims =[float(x) for x in line.split()[:6]] + self.ts.dimensions = np.array(dims, dtype=np.float32) + except (ValueError, IndexError): + pass self.ts.positions = np.array(coords, dtype=np.float32) From edfa9c3a6c8f8193e6beaf0a274c40a89fa847c4 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Fri, 16 Jan 2026 18:35:04 +0530 Subject: [PATCH 09/10] black formatting --- package/MDAnalysis/coordinates/MOL2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/MDAnalysis/coordinates/MOL2.py b/package/MDAnalysis/coordinates/MOL2.py index df052f8089c..edf80d0f5a6 100644 --- a/package/MDAnalysis/coordinates/MOL2.py +++ b/package/MDAnalysis/coordinates/MOL2.py @@ -249,7 +249,7 @@ def _read_frame(self, frame): if "crysin" in sections: try: line = sections["crysin"][0].strip() - dims =[float(x) for x in line.split()[:6]] + dims = [float(x) for x in line.split()[:6]] self.ts.dimensions = np.array(dims, dtype=np.float32) except (ValueError, IndexError): pass From b3839b5e1db2e626d121c08cef87d938670e82a4 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 20 Jan 2026 16:23:40 +0530 Subject: [PATCH 10/10] feat: add support for reading unit cell dimensions from @CRYSIN records in MOL2Parser --- package/CHANGELOG | 4 ++-- package/MDAnalysis/coordinates/MOL2.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package/CHANGELOG b/package/CHANGELOG index 1f9de906f88..7dd8536bd09 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -15,7 +15,7 @@ The rules for this file: ------------------------------------------------------------------------------- ??/??/?? IAlibay, orbeckst, marinegor, tylerjereddy, ljwoods2, marinegor, - spyke7, talagayev + spyke7, talagayev, Dreamstick9 * 2.11.0 @@ -28,6 +28,7 @@ Fixes to version 5.1.0 (Issue #5145, PR #5146) * Fixes incorrect assignment of secondary structure to proline residues in DSSP by porting upstream PyDSSP 0.9.1 fix (Issue #4913) + * MOL2Parser now reads unit cell dimensions from @CRYSIN records (Issue #3341) Enhancements * Enables parallelization for analysis.diffusionmap.DistanceMatrix @@ -223,7 +224,6 @@ Fixes * Fix doctest errors of lib/picklable_file_io.py (Issue #3925, PR #4371) * Fix deploy action to use the correct version of the pypi upload action. * Fix groups.py doctests using sphinx directives (Issue #3925, PR #4374) - * MOL2Parser now reads unit cell dimensions from @CRYSIN records (Issue #3341) Enhancements * Removed type and mass guessing from all topology parsers (PR #3753) diff --git a/package/MDAnalysis/coordinates/MOL2.py b/package/MDAnalysis/coordinates/MOL2.py index edf80d0f5a6..6ec17280138 100644 --- a/package/MDAnalysis/coordinates/MOL2.py +++ b/package/MDAnalysis/coordinates/MOL2.py @@ -69,8 +69,11 @@ * The MDAnalysis :class:`MOL2Reader` and :class:`MOL2Writer` only handle the MOLECULE, SUBSTRUCTURE, ATOM, and BOND record types. Other records are not currently read or preserved on writing. -* As the CRYSIN record type is not parsed / written, MOL2 systems always have - dimensions set to ``None`` and dimensionless MOL2 files are written. +* The MDAnalysis :class:`MOL2Reader` now reads unit cell dimensions from the + @CRYSIN record. The space group and setting information (the 7th + and 8th fields) are currently ignored. The unit cell is interpreted in the + common crystallographic convention with box vector **a** parallel to the x-axis, + **b** in the xy-plane, and **c** having a positive z-component. MOL2 format notes @@ -247,12 +250,9 @@ def _read_frame(self, frame): except KeyError: pass if "crysin" in sections: - try: - line = sections["crysin"][0].strip() - dims = [float(x) for x in line.split()[:6]] - self.ts.dimensions = np.array(dims, dtype=np.float32) - except (ValueError, IndexError): - pass + line = sections["crysin"][0].strip() + dims = [float(x) for x in line.split()[:6]] + self.ts.dimensions = np.array(dims, dtype=np.float32) self.ts.positions = np.array(coords, dtype=np.float32)