imdclient 0.1.1__py3-none-any.whl → 0.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. imdclient/{IMDREADER.py → IMD.py} +16 -15
  2. imdclient/IMDClient.py +146 -71
  3. imdclient/data/gromacs/md/gromacs_v3_nst8.mdp +58 -0
  4. imdclient/data/lammps/md/{lammps_v3.in → lammps_v3_nst_1.in} +3 -3
  5. imdclient/data/lammps/md/lammps_v3_nst_8.in +71 -0
  6. imdclient/data/namd/md/{namd_v3.namd → namd_v3_nst_1.namd} +17 -5
  7. imdclient/data/namd/md/namd_v3_nst_8.namd +59 -0
  8. imdclient/tests/base.py +133 -45
  9. imdclient/tests/conftest.py +14 -10
  10. imdclient/tests/datafiles.py +17 -9
  11. imdclient/tests/docker_testing/docker.md +25 -0
  12. imdclient/tests/test_gromacs.py +32 -10
  13. imdclient/tests/test_imdclient.py +51 -0
  14. imdclient/tests/test_imdreader.py +20 -6
  15. imdclient/tests/test_lammps.py +57 -12
  16. imdclient/tests/test_manual.py +52 -29
  17. imdclient/tests/test_namd.py +101 -14
  18. imdclient/tests/test_stream_analysis.py +2 -2
  19. imdclient/tests/utils.py +0 -1
  20. imdclient/utils.py +8 -8
  21. imdclient-0.1.3.dist-info/LICENSE +5 -0
  22. {imdclient-0.1.1.dist-info → imdclient-0.1.3.dist-info}/METADATA +21 -32
  23. imdclient-0.1.3.dist-info/RECORD +42 -0
  24. {imdclient-0.1.1.dist-info → imdclient-0.1.3.dist-info}/WHEEL +1 -1
  25. imdclient/data/gromacs/md/gromacs_v3_nst1.tpr +0 -0
  26. imdclient/data/gromacs/md/gromacs_v3_nst1.trr +0 -0
  27. imdclient/data/lammps/md/lammps_trj.h5md +0 -0
  28. imdclient/data/namd/md/alanin.dcd +0 -0
  29. imdclient-0.1.1.dist-info/LICENSE +0 -21
  30. imdclient-0.1.1.dist-info/RECORD +0 -42
  31. {imdclient-0.1.1.dist-info → imdclient-0.1.3.dist-info}/AUTHORS.md +0 -0
  32. {imdclient-0.1.1.dist-info → imdclient-0.1.3.dist-info}/top_level.txt +0 -0
@@ -1,18 +1,24 @@
1
- from imdclient.IMDClient import IMDClient
1
+ from imdclient.IMD import IMDReader
2
2
  import pytest
3
3
  import MDAnalysis as mda
4
4
  from MDAnalysisTests.coordinates.base import assert_timestep_almost_equal
5
5
  from numpy.testing import (
6
- assert_array_almost_equal,
7
- assert_almost_equal,
8
6
  assert_allclose,
9
7
  )
10
8
  import numpy as np
11
9
  from .base import assert_allclose_with_logging
10
+ from pathlib import Path
12
11
 
13
12
  import logging
14
13
 
15
14
  logger = logging.getLogger("imdclient.IMDClient")
15
+ file_handler = logging.FileHandler("manual_test.log")
16
+ formatter = logging.Formatter(
17
+ "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
18
+ )
19
+ file_handler.setFormatter(formatter)
20
+ logger.addHandler(file_handler)
21
+ logger.setLevel(logging.DEBUG)
16
22
 
17
23
 
18
24
  class TestIMDv3Manual:
@@ -23,48 +29,65 @@ class TestIMDv3Manual:
23
29
  and then run this command relative to the root of the cloned respository:
24
30
 
25
31
  pytest -s imdclient/tests/test_manual.py \
26
- --topol_arg <path/to/topology> \
27
- --traj_arg <path/to/trajectory> \
32
+ --topol_path_arg <path/to/topology> \
33
+ --traj_path_arg <path/to/trajectory> \
28
34
  --first_frame_arg <first traj frame to compare to IMD>
29
35
 
30
- Where the topology is the same topology as the IMD system, the trajectory is the trajectory
31
- to compare to IMD data read from the socket, and the first frame is the first frame of the
36
+ Where the topology is the same topology as the IMD system, the trajectory is the path where
37
+ the trajectory of the running simulation is being written, and the first frame is the first frame of the
32
38
  trajectory which should be compared to IMD data read from the socket (0 for GROMACS and NAMD, 1 for LAMMPS)
33
39
  """
34
40
 
35
41
  @pytest.fixture()
36
- def universe(self, topol_arg, traj_arg):
37
- return mda.Universe(topol_arg, traj_arg)
42
+ def true_u(self, imd_u, topol_path_arg, traj_path_arg):
43
+ return mda.Universe(topol_path_arg, traj_path_arg)
38
44
 
39
45
  @pytest.fixture()
40
- def client(self, universe):
41
- client = IMDClient("localhost", 8888, universe.trajectory.n_atoms)
42
- yield client
43
- client.stop()
46
+ def imd_u(self, topol_path_arg, tmp_path):
47
+ tmp_u = mda.Universe(topol_path_arg, "imd://localhost:8888")
48
+ with mda.Writer(
49
+ f"{tmp_path.as_posix()}/imd_test_traj.trr", tmp_u.atoms.n_atoms
50
+ ) as w:
51
+ for ts in tmp_u.trajectory:
52
+ w.write(tmp_u.atoms)
53
+ imd_u = mda.Universe(
54
+ topol_path_arg, f"{tmp_path.as_posix()}/imd_test_traj.trr"
55
+ )
56
+ yield imd_u
44
57
 
45
- def test_compare_imd_to_true_traj(self, universe, client, first_frame_arg):
46
- imdsinfo = client.get_imdsessioninfo()
58
+ def test_compare_imd_to_true_traj(self, true_u, imd_u, first_frame_arg):
47
59
 
48
- for ts in universe.trajectory[first_frame_arg:]:
49
- imdf = client.get_imdframe()
50
- if imdsinfo.time:
51
- assert_allclose(imdf.time, ts.time, atol=1e-03)
52
- assert_allclose(imdf.step, ts.data["step"])
53
- if imdsinfo.box:
60
+ for i in range(first_frame_arg, len(true_u.trajectory)):
61
+ assert_allclose(
62
+ true_u.trajectory[i].time,
63
+ imd_u.trajectory[i - first_frame_arg].time,
64
+ atol=1e-03,
65
+ )
66
+ assert_allclose(
67
+ true_u.trajectory[i].data["step"],
68
+ imd_u.trajectory[i - first_frame_arg].data["step"],
69
+ )
70
+ if true_u.trajectory[i].dimensions is not None:
54
71
  assert_allclose_with_logging(
55
- imdf.box,
56
- ts.triclinic_dimensions,
72
+ true_u.trajectory[i].dimensions,
73
+ imd_u.trajectory[i - first_frame_arg].dimensions,
57
74
  atol=1e-03,
58
75
  )
59
- if imdsinfo.positions:
76
+ if true_u.trajectory[i].has_positions:
60
77
  assert_allclose_with_logging(
61
- imdf.positions, ts.positions, atol=1e-03
78
+ true_u.trajectory[i].positions,
79
+ imd_u.trajectory[i - first_frame_arg].positions,
80
+ atol=1e-03,
62
81
  )
63
- if imdsinfo.velocities:
82
+ if true_u.trajectory[i].has_velocities:
64
83
  assert_allclose_with_logging(
65
- imdf.velocities, ts.velocities, atol=1e-03
84
+ true_u.trajectory[i].velocities,
85
+ imd_u.trajectory[i - first_frame_arg].velocities,
86
+ atol=1e-03,
66
87
  )
67
- if imdsinfo.forces:
88
+ if true_u.trajectory[i].has_forces:
68
89
  assert_allclose_with_logging(
69
- imdf.forces, ts.forces, atol=1e-03
90
+ true_u.trajectory[i].forces,
91
+ imd_u.trajectory[i - first_frame_arg].forces,
92
+ atol=1e-03,
70
93
  )
@@ -1,11 +1,21 @@
1
1
  import MDAnalysis as mda
2
2
  import pytest
3
3
  import logging
4
- from .base import IMDv3IntegrationTest
5
- from .datafiles import NAMD_TOPOL, NAMD_CONF, NAMD_TRAJ, NAMD_PARAMS, NAMD_PSF
4
+ from .base import IMDv3IntegrationTest, assert_allclose_with_logging
5
+ from .datafiles import (
6
+ NAMD_TOPOL,
7
+ NAMD_CONF_NST_1,
8
+ NAMD_CONF_NST_8,
9
+ NAMD_PARAMS,
10
+ NAMD_PSF,
11
+ )
12
+ from pathlib import Path
13
+ from numpy.testing import (
14
+ assert_allclose,
15
+ )
6
16
 
7
17
  logger = logging.getLogger("imdclient.IMDClient")
8
- file_handler = logging.FileHandler("test.log")
18
+ file_handler = logging.FileHandler("namd_test.log")
9
19
  formatter = logging.Formatter(
10
20
  "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
11
21
  )
@@ -16,23 +26,100 @@ logger.setLevel(logging.DEBUG)
16
26
 
17
27
  class TestIMDv3NAMD(IMDv3IntegrationTest):
18
28
 
29
+ @pytest.fixture(params=[NAMD_CONF_NST_1, NAMD_CONF_NST_8])
30
+ def inp(self, request):
31
+ return request.param
32
+
33
+ @pytest.fixture()
34
+ def simulation_command(self, inp):
35
+ return f"namd3 {Path(inp).name}"
36
+
37
+ @pytest.fixture()
38
+ def input_files(self, inp):
39
+ return [NAMD_TOPOL, inp, NAMD_PARAMS, NAMD_PSF]
40
+
41
+ @pytest.fixture()
42
+ def topol(self):
43
+ return Path(NAMD_TOPOL).name
44
+
19
45
  @pytest.fixture()
20
- def command(self):
21
- return (
22
- f"cp {NAMD_PARAMS} {NAMD_PSF} {NAMD_TOPOL} . && namd3 {NAMD_CONF}"
46
+ def true_u(self, topol, imd_u, tmp_path):
47
+ u = mda.Universe(
48
+ (tmp_path / topol),
49
+ (tmp_path / "alanin.dcd"),
23
50
  )
51
+ yield u
24
52
 
25
53
  @pytest.fixture()
26
- def match_string(self):
27
- return "INTERACTIVE MD AWAITING CONNECTION"
54
+ def true_u_vel(self, topol, imd_u, tmp_path):
55
+ u = mda.Universe(
56
+ (tmp_path / topol),
57
+ (tmp_path / "alanin.vel.dcd"),
58
+ )
59
+ yield u
60
+
61
+ @pytest.fixture()
62
+ def true_u_force(self, topol, imd_u, tmp_path):
63
+ u = mda.Universe(
64
+ (tmp_path / topol),
65
+ (tmp_path / "alanin.force.dcd"),
66
+ )
67
+ yield u
68
+
69
+ # @pytest.fixture()
70
+ # def match_string(self):
71
+ # return "INTERACTIVE MD AWAITING CONNECTION"
28
72
 
29
73
  @pytest.fixture()
30
74
  def first_frame(self):
31
75
  return 0
32
76
 
33
- @pytest.fixture()
34
- def universe(self):
35
- return mda.Universe(
36
- NAMD_TOPOL,
37
- NAMD_TRAJ,
38
- )
77
+ # Compare coords, box, time, dt, step
78
+ def test_compare_imd_to_true_traj(self, imd_u, true_u, first_frame):
79
+ for i in range(first_frame, len(true_u.trajectory)):
80
+ assert_allclose(
81
+ true_u.trajectory[i].time,
82
+ imd_u.trajectory[i - first_frame].time,
83
+ atol=1e-03,
84
+ )
85
+ assert_allclose(
86
+ true_u.trajectory[i].dt,
87
+ imd_u.trajectory[i - first_frame].dt,
88
+ atol=1e-03,
89
+ )
90
+ assert_allclose(
91
+ true_u.trajectory[i].data["step"],
92
+ imd_u.trajectory[i - first_frame].data["step"],
93
+ )
94
+ assert_allclose_with_logging(
95
+ true_u.trajectory[i].dimensions,
96
+ imd_u.trajectory[i - first_frame].dimensions,
97
+ atol=1e-03,
98
+ )
99
+ assert_allclose_with_logging(
100
+ true_u.trajectory[i].positions,
101
+ imd_u.trajectory[i - first_frame].positions,
102
+ atol=1e-03,
103
+ )
104
+
105
+ # Compare velocities
106
+ def test_compare_imd_to_true_traj_vel(
107
+ self, imd_u, true_u_vel, first_frame
108
+ ):
109
+ for i in range(first_frame, len(true_u_vel.trajectory)):
110
+ assert_allclose_with_logging(
111
+ true_u_vel.trajectory[i].positions,
112
+ imd_u.trajectory[i - first_frame].velocities,
113
+ atol=1e-03,
114
+ )
115
+
116
+ # Compare forces
117
+ def test_compare_imd_to_true_traj_forces(
118
+ self, imd_u, true_u_force, first_frame
119
+ ):
120
+ for i in range(first_frame, len(true_u_force.trajectory)):
121
+ assert_allclose_with_logging(
122
+ true_u_force.trajectory[i].positions,
123
+ imd_u.trajectory[i - first_frame].forces,
124
+ atol=1e-03,
125
+ )
@@ -15,7 +15,7 @@ from numpy.testing import (
15
15
  )
16
16
  import numpy as np
17
17
  import pytest
18
- from imdclient.IMDREADER import IMDReader
18
+ from imdclient.IMD import IMDReader
19
19
 
20
20
 
21
21
  class TestStreamAnalysis:
@@ -38,7 +38,7 @@ class TestStreamAnalysis:
38
38
  server.set_imdsessioninfo(imdsinfo)
39
39
  server.handshake_sequence("localhost", port, first_frame=True)
40
40
 
41
- imd_universe = mda.Universe(COORDINATES_TOPOLOGY, f"localhost:{port}")
41
+ imd_universe = mda.Universe(COORDINATES_TOPOLOGY, f"imd://localhost:{port}")
42
42
  server.send_frames(1, 5)
43
43
 
44
44
  yield imd_universe
imdclient/tests/utils.py CHANGED
@@ -1,6 +1,5 @@
1
1
  from imdclient.IMDProtocol import *
2
2
  import socket
3
- from imdclient.IMDProtocol import *
4
3
  import logging
5
4
 
6
5
 
imdclient/utils.py CHANGED
@@ -43,22 +43,22 @@ class timeit(object):
43
43
  # always propagate exceptions forward
44
44
  return False
45
45
 
46
-
47
46
  # NOTE: think of other edge cases as well- should be robust
48
47
  def parse_host_port(filename):
48
+ if not filename.startswith("imd://"):
49
+ raise ValueError("IMDReader: URL must be in the format 'imd://host:port'")
50
+
49
51
  # Check if the format is correct
50
- parts = filename.split(":")
52
+ parts = filename.split("imd://")[1].split(":")
51
53
  if len(parts) == 2:
52
- host = parts[0] # Hostname part
54
+ host = parts[0]
53
55
  try:
54
- port = int(parts[1]) # Convert the port part to an integer
56
+ port = int(parts[1])
55
57
  return (host, port)
56
58
  except ValueError:
57
- # Handle the case where the port is not a valid integer
58
- raise ValueError("Port must be an integer")
59
+ raise ValueError("IMDReader: Port must be an integer")
59
60
  else:
60
- # Handle the case where the format does not match "host:port"
61
- raise ValueError("Filename must be in the format 'host:port'")
61
+ raise ValueError("IMDReader: URL must be in the format 'imd://host:port'")
62
62
 
63
63
 
64
64
  def approximate_timestep_memsize(
@@ -0,0 +1,5 @@
1
+ Copyright 2024 Lawson Woods
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
@@ -1,45 +1,29 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imdclient
3
- Version: 0.1.1
3
+ Version: 0.1.3
4
4
  Summary: Receiver for IMD v2 and v3 data from simulation engines like Gromacs, LAMMPS, and NAMD
5
5
  Author-email: Lawson <ljwoods2@asu.edu>
6
6
  Maintainer-email: Lawson <ljwoods2@asu.edu>
7
- License: MIT License
7
+ License: Copyright 2024 Lawson Woods
8
8
 
9
- Copyright (c) 2024 ljwoods2
10
-
11
- Permission is hereby granted, free of charge, to any person obtaining a copy
12
- of this software and associated documentation files (the "Software"), to deal
13
- in the Software without restriction, including without limitation the rights
14
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
- copies of the Software, and to permit persons to whom the Software is
16
- furnished to do so, subject to the following conditions:
17
-
18
- The above copyright notice and this permission notice shall be included in all
19
- copies or substantial portions of the Software.
20
-
21
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
- SOFTWARE.
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
28
10
 
11
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
29
12
  Keywords: molecular simulations
30
13
  Requires-Python: >=3.9
31
14
  Description-Content-Type: text/markdown
32
15
  License-File: LICENSE
33
16
  License-File: AUTHORS.md
34
- Requires-Dist: MDAnalysis >=2.7.0
35
- Provides-Extra: doc
36
- Requires-Dist: sphinx ; extra == 'doc'
37
- Requires-Dist: sphinx-rtd-theme ; extra == 'doc'
17
+ Requires-Dist: MDAnalysis>=2.7.0
38
18
  Provides-Extra: test
39
- Requires-Dist: pytest >=6.0 ; extra == 'test'
40
- Requires-Dist: pytest-xdist >=2.5 ; extra == 'test'
41
- Requires-Dist: pytest-cov >=3.0 ; extra == 'test'
42
- Requires-Dist: MDAnalysisTests >=2.7.0 ; extra == 'test'
19
+ Requires-Dist: pytest>=6.0; extra == "test"
20
+ Requires-Dist: pytest-xdist>=2.5; extra == "test"
21
+ Requires-Dist: pytest-cov>=3.0; extra == "test"
22
+ Requires-Dist: MDAnalysisTests>=2.7.0; extra == "test"
23
+ Requires-Dist: docker-py; extra == "test"
24
+ Provides-Extra: doc
25
+ Requires-Dist: sphinx; extra == "doc"
26
+ Requires-Dist: sphinx_rtd_theme; extra == "doc"
43
27
 
44
28
  IMDClient
45
29
  ==============================
@@ -48,7 +32,7 @@ IMDClient
48
32
  | **Latest release** | [![Last release tag][badge_release]][url_latest_release] ![GitHub commits since latest release (by date) for a branch][badge_commits_since] [![Documentation Status][badge_docs]][url_docs]|
49
33
  | :----------------- | :------- |
50
34
  | **Status** | [![GH Actions Status][badge_actions]][url_actions] [![codecov][badge_codecov]][url_codecov] |
51
- | **Community** | [![License: GPL v2][badge_license]][url_license] [![Powered by MDAnalysis][badge_mda]][url_mda]|
35
+ | **Community** | [![License: MIT][badge_license]][url_license] [![Powered by MDAnalysis][badge_mda]][url_mda]|
52
36
 
53
37
  [badge_actions]: https://github.com/becksteinlab/imdclient/actions/workflows/gh-ci.yaml/badge.svg
54
38
  [badge_codecov]: https://codecov.io/gh/becksteinlab/imdclient/branch/main/graph/badge.svg
@@ -61,15 +45,20 @@ IMDClient
61
45
  [url_codecov]: https://codecov.io/gh/becksteinlab/imdclient/branch/main
62
46
  [url_docs]: https://imdclient.readthedocs.io/en/latest/?badge=latest
63
47
  [url_latest_release]: https://github.com/becksteinlab/imdclient/releases
64
- [url_license]: https://www.gnu.org/licenses/gpl-2.0
48
+ [url_license]: https://opensource.org/license/mit
65
49
  [url_mda]: https://www.mdanalysis.org
66
50
 
67
- Receiver for IMDv3 protocol from simulation engines like Gromacs, LAMMPS, and NAMD.
51
+ Receiver for [IMDv3 protocol](https://imdclient.readthedocs.io/en/latest/protocol_v3.html) from simulation engines like Gromacs, LAMMPS, and NAMD.
68
52
 
69
53
  IMDClient is bound by a [Code of Conduct](https://github.com/becksteinlab/imdreader/blob/main/CODE_OF_CONDUCT.md).
70
54
 
71
55
  ### Installation
72
56
 
57
+ IMDClient is available via PyPi and can be installed with pip:
58
+ ```bash
59
+ pip install imdclient
60
+ ```
61
+
73
62
  To build IMDClient from source,
74
63
  we highly recommend using virtual environments.
75
64
  If possible, we strongly recommend that you use
@@ -0,0 +1,42 @@
1
+ imdclient/IMD.py,sha256=-ySUiRBumVEKyZU3UXXNywajtVnERQhtP4ama3guCR4,3767
2
+ imdclient/IMDClient.py,sha256=6p8nLe70d-eUdsJ6QNcpc8V1Mp-ozD7mhB35_p6Owuc,33330
3
+ imdclient/IMDProtocol.py,sha256=jm7ehwfDCcs-zWHjZ2V2KpAWdGhD4JSy7RVtCSF0818,4045
4
+ imdclient/__init__.py,sha256=Pa5h6Fjyvyxf3ECzO43pcmLm3Vk-vOuEb5Gi6TDWhds,339
5
+ imdclient/backends.py,sha256=QmHjwYbmvFVHz-uFgpSOA0UmZTZqiMGqWMO7B8wr1zs,10368
6
+ imdclient/results.py,sha256=2MyjFdQMW7BfiHhG5X6wQwMVrF_0mKYFnv907lgLMas,9920
7
+ imdclient/streamanalysis.py,sha256=Qq0h_WPO-wb0_lP8jTRHe0HX7UDZNgJFA6C4PZdUmK8,38385
8
+ imdclient/streambase.py,sha256=rwhdyC2V3_9pSz_6rNwjSc4MNToI9S318OH7AH0arHA,6176
9
+ imdclient/utils.py,sha256=VWxk4vQ6hzxoYRu-8Ge8fJG-EitJwgJR93wOWCvzY-0,3308
10
+ imdclient/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ imdclient/data/gromacs/md/gromacs_struct.gro,sha256=kt4vE10iF_1RbeyTogmYmIY9yKJacofrzNT-hPHGyL8,1459301
12
+ imdclient/data/gromacs/md/gromacs_v3.top,sha256=AXFEDjvz5Qqq-VECffimdeEvhD6L-H0SFPILW-6Sums,348329
13
+ imdclient/data/gromacs/md/gromacs_v3_nst1.mdp,sha256=3ZStLxoeQo7k5R3C6EY2oRxet_FAccDEIwVsymbN8f4,3053
14
+ imdclient/data/gromacs/md/gromacs_v3_nst8.mdp,sha256=CYz5gKFApeJMrJyCmd3kgPFzRjahgaLRNyIomuVyY0w,3053
15
+ imdclient/data/lammps/md/lammps_topol.data,sha256=u4osSkn7yG9p2Egz9ovLW4eVmdaThPxeZ0L218J3-V0,172948
16
+ imdclient/data/lammps/md/lammps_v3_nst_1.in,sha256=AcvkgNNDtTkB7RlFZwpUEKKp6W_7o_UFgrX_LwC3HXI,2586
17
+ imdclient/data/lammps/md/lammps_v3_nst_8.in,sha256=gpdAp1dDhJbG06wZVDtBGUs6biJNz8EStV341S0uJ2s,2594
18
+ imdclient/data/namd/md/alanin.params,sha256=zWw-UfqYD3-xpdA_8R8T-0OYBbUM6py7jKAq_uyu8HE,17389
19
+ imdclient/data/namd/md/alanin.pdb,sha256=eccDD-ledUXjbB2s1fxY40lmAKWWDpxkxANbsOkqjHc,5615
20
+ imdclient/data/namd/md/alanin.psf,sha256=VhCZeGFhpUa8yN5iEL19zlVjqIJg2JIdPzhazpRForY,12953
21
+ imdclient/data/namd/md/namd_v3_nst_1.namd,sha256=EZU7PGyytZdGixrBnmpAcwonN0n_JTk9U-Q82FoqO7k,983
22
+ imdclient/data/namd/md/namd_v3_nst_8.namd,sha256=WJmwj0E4nJVhYRr_ALBlTax6kyNkdRE1krPsmY-QFLM,984
23
+ imdclient/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ imdclient/tests/base.py,sha256=CoU6oZanTnWrASxY5aRJdICtj4yz5PfYwh9iqQ_o8WE,6461
25
+ imdclient/tests/conftest.py,sha256=ERj5d4roxWGqpXS8-W-LFB_INEkb_4oz5ous92u2yK4,1377
26
+ imdclient/tests/datafiles.py,sha256=NtLuk1P4vk1h4b5Hb71vne2RMmWKGRV9RaIfRvLOfIc,1262
27
+ imdclient/tests/server.py,sha256=7KqzDg74d7Oe617jctB-rDGvEUNSaT9agkp9SiEtiME,6978
28
+ imdclient/tests/test_gromacs.py,sha256=rXkabRB40xX7LRdF2_nrPgeNpfFF9J7m-5LeRNMA5TM,1454
29
+ imdclient/tests/test_imdclient.py,sha256=hhfvI1wGocE5e38tfbsNW9w2uotUXtedhq3FOQC68EM,7030
30
+ imdclient/tests/test_imdreader.py,sha256=bD2we7TBJwM4wcHJh9ob6Ap8hNsGu1KTkc_tQ_5IzrU,23532
31
+ imdclient/tests/test_lammps.py,sha256=hwZBVvhclN1mtPuYLyODUaWjlaZaAkhAFqX-mpQvWk4,2244
32
+ imdclient/tests/test_manual.py,sha256=BR8MCdCUxcaDKSFyR-jLhJ4mk9s9CIS5MIAf5dR4PBE,3557
33
+ imdclient/tests/test_namd.py,sha256=dFOJUQl9ByekuuYgUOIirf6qFj5_qaKfgQq4Qimtotw,3671
34
+ imdclient/tests/test_stream_analysis.py,sha256=qqsm_Bv8qCXyNwgdSKZM8bLyiEO5nlpqJ-XtEn-YKew,1723
35
+ imdclient/tests/utils.py,sha256=_x1gVQ3AmhaMurpcEPLKBG5BTGu4ZMy5EGUpr0P6D6g,854
36
+ imdclient/tests/docker_testing/docker.md,sha256=SxHEpSA1mXAvzYzsxL0EesGqPCVC8qdRMbvxGz5R0Yo,840
37
+ imdclient-0.1.3.dist-info/AUTHORS.md,sha256=R4JTI7mrgL1WYgfyuAv4quw0e0oLQGVjWcMQa-UXJlE,652
38
+ imdclient-0.1.3.dist-info/LICENSE,sha256=28aS5DC2LCwcOVe3VN0g2L-Dooqof34T9TMGJ6jqMig,593
39
+ imdclient-0.1.3.dist-info/METADATA,sha256=6Vl27FFPSTPCa1MDlSDCsk9rrGCdGY6wKGJ1G1pvHJM,6531
40
+ imdclient-0.1.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
41
+ imdclient-0.1.3.dist-info/top_level.txt,sha256=40W62GWiXUT2CbDm-No7GTeJG160wyIMpk1hBNrdkkE,10
42
+ imdclient-0.1.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
Binary file
Binary file
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 ljwoods2
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,42 +0,0 @@
1
- imdclient/IMDClient.py,sha256=2P4wgv8fZjZ_3JFLsm3L2JxxAlTAiWTZtXr5vRWJHf0,30687
2
- imdclient/IMDProtocol.py,sha256=jm7ehwfDCcs-zWHjZ2V2KpAWdGhD4JSy7RVtCSF0818,4045
3
- imdclient/IMDREADER.py,sha256=V8yfkQkKYyWwYh0V2m7EOg0yzdsUKmQAqDmIlzgiiIY,3712
4
- imdclient/__init__.py,sha256=Pa5h6Fjyvyxf3ECzO43pcmLm3Vk-vOuEb5Gi6TDWhds,339
5
- imdclient/backends.py,sha256=QmHjwYbmvFVHz-uFgpSOA0UmZTZqiMGqWMO7B8wr1zs,10368
6
- imdclient/results.py,sha256=2MyjFdQMW7BfiHhG5X6wQwMVrF_0mKYFnv907lgLMas,9920
7
- imdclient/streamanalysis.py,sha256=Qq0h_WPO-wb0_lP8jTRHe0HX7UDZNgJFA6C4PZdUmK8,38385
8
- imdclient/streambase.py,sha256=rwhdyC2V3_9pSz_6rNwjSc4MNToI9S318OH7AH0arHA,6176
9
- imdclient/utils.py,sha256=kd1e5nqEOb46hCR_9ITjDB30j56mXFbV0u_wMv0pMco,3330
10
- imdclient/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- imdclient/data/gromacs/md/gromacs_struct.gro,sha256=kt4vE10iF_1RbeyTogmYmIY9yKJacofrzNT-hPHGyL8,1459301
12
- imdclient/data/gromacs/md/gromacs_v3.top,sha256=AXFEDjvz5Qqq-VECffimdeEvhD6L-H0SFPILW-6Sums,348329
13
- imdclient/data/gromacs/md/gromacs_v3_nst1.mdp,sha256=3ZStLxoeQo7k5R3C6EY2oRxet_FAccDEIwVsymbN8f4,3053
14
- imdclient/data/gromacs/md/gromacs_v3_nst1.tpr,sha256=YDXlSFxUmvRBuo2za7By7QYzcdQ6Z0agypl3V5Hqt4Q,912932
15
- imdclient/data/gromacs/md/gromacs_v3_nst1.trr,sha256=deehbC7X_HvJj_DDRptoePNhjKy70w8n_myWsxoPWMQ,76906248
16
- imdclient/data/lammps/md/lammps_topol.data,sha256=u4osSkn7yG9p2Egz9ovLW4eVmdaThPxeZ0L218J3-V0,172948
17
- imdclient/data/lammps/md/lammps_trj.h5md,sha256=9J5dCVznJQKDFCSCS73p0YMR0hYDzyQC4WPVEsopw4s,30116656
18
- imdclient/data/lammps/md/lammps_v3.in,sha256=4MF-lXcVoFVTjuqAy5Z9o5ukj3qhZ3cK3hKc8em-050,2592
19
- imdclient/data/namd/md/alanin.dcd,sha256=UJIjQBjv6oZTn5CnJNwU_5mur_KrD69iV5TOvq935lo,8436
20
- imdclient/data/namd/md/alanin.params,sha256=zWw-UfqYD3-xpdA_8R8T-0OYBbUM6py7jKAq_uyu8HE,17389
21
- imdclient/data/namd/md/alanin.pdb,sha256=eccDD-ledUXjbB2s1fxY40lmAKWWDpxkxANbsOkqjHc,5615
22
- imdclient/data/namd/md/alanin.psf,sha256=VhCZeGFhpUa8yN5iEL19zlVjqIJg2JIdPzhazpRForY,12953
23
- imdclient/data/namd/md/namd_v3.namd,sha256=KWH3RXsa0aeA9dYSz9CnUFHcDGbAFnB3yLoYaLtCiBs,720
24
- imdclient/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- imdclient/tests/base.py,sha256=OsoZm4T5E7p4XEQ6F4Je0g3vgpa8wcPQgKbWaC2AttQ,3761
26
- imdclient/tests/conftest.py,sha256=k_QOYMf8Q70ebP1tRKclIYYM9DE6XKvP5NiJgllu8w8,1255
27
- imdclient/tests/datafiles.py,sha256=36Mip1wx_LHukJIaHu0Ew-F0XFIEXNEyXg2wRzQLDaM,1118
28
- imdclient/tests/server.py,sha256=7KqzDg74d7Oe617jctB-rDGvEUNSaT9agkp9SiEtiME,6978
29
- imdclient/tests/test_gromacs.py,sha256=4HbgK6lnE6G35bvYDpFiQbLVz7-q9BB9FKsgjeCa9do,942
30
- imdclient/tests/test_imdclient.py,sha256=99u_xIHNMCCJSew5IoPndxAa5N3F-r37jqFProkl4Ts,5336
31
- imdclient/tests/test_imdreader.py,sha256=TID3iFOZRY3wrHobYkP5FNYIYwAt3c2SIc8ACkTSotY,22954
32
- imdclient/tests/test_lammps.py,sha256=NZqX0Hj65I3A33LpejZThZTo-0PuI_4x_wODzJ9o490,957
33
- imdclient/tests/test_manual.py,sha256=2YNRkpaGdI5-Pro6xSCujhwZHsHf0C1Ehu2v2dk3lbM,2507
34
- imdclient/tests/test_namd.py,sha256=69F27qUH2GmdQMvm3RQHQFS1aAl8JiNz16SN8D6mp-E,962
35
- imdclient/tests/test_stream_analysis.py,sha256=BS3U-FwBc2shYAsDHvUX8H6Zioo_tUNGirkzWcuMXEY,1723
36
- imdclient/tests/utils.py,sha256=i5GviFFdIaDsAOv8giP_jVJUeGww86nD0l2brB4_jRM,890
37
- imdclient-0.1.1.dist-info/AUTHORS.md,sha256=R4JTI7mrgL1WYgfyuAv4quw0e0oLQGVjWcMQa-UXJlE,652
38
- imdclient-0.1.1.dist-info/LICENSE,sha256=cERlftlPR1Vka6DmjkIosLRBZTXXhOsLFU3jw1ELcXs,1065
39
- imdclient-0.1.1.dist-info/METADATA,sha256=O5rAMU1eSnDZDqxHFkRyocftSD92MP0k-6s7u9V251Y,6952
40
- imdclient-0.1.1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
41
- imdclient-0.1.1.dist-info/top_level.txt,sha256=40W62GWiXUT2CbDm-No7GTeJG160wyIMpk1hBNrdkkE,10
42
- imdclient-0.1.1.dist-info/RECORD,,