CodeEntropy 2.6.1__py3-none-any.whl → 2.7.1__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.
CodeEntropy/__init__.py CHANGED
@@ -8,4 +8,4 @@ entropy estimates, supporting a wide range of applications in molecular simulati
8
8
  and statistical mechanics.
9
9
  """
10
10
 
11
- __version__ = "2.6.1"
11
+ __version__ = "2.7.1"
@@ -129,9 +129,17 @@ ARG_SPECS: dict[str, ArgSpec] = {
129
129
  help="Force partitioning",
130
130
  ),
131
131
  "water_entropy": ArgSpec(
132
+ type=bool,
133
+ default=False,
134
+ help="If set to True, enables the calculation of water entropy",
135
+ ),
136
+ "water_entropy_parallel": ArgSpec(
132
137
  type=bool,
133
138
  default=True,
134
- help="If set to False, disables the calculation of water entropy",
139
+ help=(
140
+ "If set to False, disables the parallel calculation of "
141
+ "water entropy and switches to serial"
142
+ ),
135
143
  ),
136
144
  "grouping": ArgSpec(
137
145
  type=str,
@@ -35,6 +35,7 @@ class WaterEntropyInput:
35
35
  end: int
36
36
  step: int
37
37
  temperature: float
38
+ parallel: bool
38
39
  group_id: int | None = None
39
40
 
40
41
 
@@ -53,7 +54,7 @@ class WaterEntropy:
53
54
  self,
54
55
  args: Any,
55
56
  reporter: Any,
56
- solver: Callable[..., tuple[dict, Any, Any, Any, Any]] = (
57
+ solver: Callable[..., tuple[dict, Any, Any, Any, Any, Any]] = (
57
58
  GetSolvent.get_interfacial_water_orient_entropy
58
59
  ),
59
60
  ) -> None:
@@ -77,6 +78,7 @@ class WaterEntropy:
77
78
  start: int,
78
79
  end: int,
79
80
  step: int,
81
+ parallel: bool,
80
82
  group_id: int | None = None,
81
83
  ) -> None:
82
84
  """Compute water entropy and write results to the data logger.
@@ -95,6 +97,7 @@ class WaterEntropy:
95
97
  step=step,
96
98
  temperature=float(self._args.temperature),
97
99
  group_id=group_id,
100
+ parallel=parallel,
98
101
  )
99
102
  self._calculate_and_log_from_inputs(inputs)
100
103
 
@@ -119,10 +122,12 @@ class WaterEntropy:
119
122
  Tuple of solver outputs.
120
123
  """
121
124
  logger.info(
122
- "[WaterEntropy] Computing water entropy (start=%s, end=%s, step=%s)",
125
+ "[WaterEntropy] Computing water entropy (start=%s, end=%s, step=%s, "
126
+ "parallel=%s)",
123
127
  inputs.start,
124
128
  inputs.end,
125
129
  inputs.step,
130
+ inputs.parallel,
126
131
  )
127
132
  return self._solver(
128
133
  inputs.universe,
@@ -130,7 +135,7 @@ class WaterEntropy:
130
135
  inputs.end,
131
136
  inputs.step,
132
137
  inputs.temperature,
133
- parallel=True,
138
+ inputs.parallel,
134
139
  )
135
140
 
136
141
  def _log_orientational_entropy(
@@ -144,8 +149,9 @@ class WaterEntropy:
144
149
  """
145
150
  for _resid, resname_dict in Sorient_dict.items():
146
151
  for resname, values in resname_dict.items():
147
- if isinstance(values, list) and len(values) == 2:
148
- entropy, count = values
152
+ if isinstance(values, dict):
153
+ entropy = values["Sorient_Nw_ave"]
154
+ count = values["tot_count"]
149
155
  self._reporter.add_residue_data(
150
156
  group_id, resname, "Water", "Orientational", count, entropy
151
157
  )
@@ -105,7 +105,11 @@ class EntropyWorkflow:
105
105
  reduced_universe, groups
106
106
  )
107
107
 
108
- if self._args.water_entropy and water_groups and nonwater_groups:
108
+ if self._args.water_entropy and water_groups:
109
+ if not nonwater_groups:
110
+ logger.warning(
111
+ "You are running waterEntropy on bulk water, this will be slow!"
112
+ )
109
113
  self._compute_water_entropy(frame_selection, water_groups)
110
114
  else:
111
115
  nonwater_groups.update(water_groups)
@@ -394,6 +398,7 @@ class EntropyWorkflow:
394
398
  start=start,
395
399
  end=end,
396
400
  step=step,
401
+ parallel=self._args.water_entropy_parallel,
397
402
  group_id=group_id,
398
403
  )
399
404
 
@@ -82,15 +82,14 @@ class AxesCalculator:
82
82
  * Translational axes are principal axes of data_container.
83
83
  * Find edge heavy atom (i.e. heavy atoms bonded to neighbour residue).
84
84
  Compute rotation centre and axes as in get_terminal_axes.
85
- Compute custom MOI, using heavy atom positions and
86
- heavy atom + hydrogen masses.
85
+ Compute custom MOI, using all atoms positions and masses.
87
86
 
88
87
  - If bonded to at least two other residues:
89
88
  * Translational axes are principal axes of data_container.
90
89
  * Find edge heavy atoms (i.e. heavy atoms bonded to neighbour residues).
91
90
  Compute rotation centre and axes as in get_non_terminal_axes.
92
- Compute a custom MOI, using heavy atom positions and
93
- heavy atom + hydrogen masses.
91
+ Compute custom MOI, using all atoms positions and masses.
92
+
94
93
 
95
94
  Args:
96
95
  data_container (MDAnalysis.Universe or AtomGroup):
@@ -134,19 +133,8 @@ class AxesCalculator:
134
133
  f"resindex {index_next})"
135
134
  )
136
135
 
137
- uas = residue.select_atoms("mass 2 to 999")
138
- ua_masses = self.get_UA_masses(residue)
139
-
140
136
  if len(edge_atom_set) == 0:
141
- moi_tensor = self.get_moment_of_inertia_tensor(
142
- center_of_mass=np.array(residue.center_of_mass()),
143
- positions=uas.positions,
144
- masses=ua_masses,
145
- dimensions=data_container.dimensions[:3],
146
- )
147
- rot_axes, moment_of_inertia = self.get_principal_axes_from_tensor(
148
- moi_tensor
149
- )
137
+ rot_axes, moment_of_inertia = self.get_molecule_axes(residue)
150
138
  trans_axes = rot_axes # per original convention
151
139
  rot_center = np.array(residue.center_of_mass())
152
140
  else:
@@ -167,8 +155,8 @@ class AxesCalculator:
167
155
  )
168
156
  moment_of_inertia = self.get_custom_residue_moment_of_inertia(
169
157
  center_of_mass=rot_center,
170
- positions=uas.positions,
171
- masses=ua_masses,
158
+ positions=residue.atoms.positions,
159
+ masses=residue.atoms.masses,
172
160
  custom_rot_axes=rot_axes,
173
161
  dimensions=data_container.dimensions[:3],
174
162
  )
@@ -181,7 +169,6 @@ class AxesCalculator:
181
169
  mol,
182
170
  residue_atoms,
183
171
  topology,
184
- box: np.ndarray | None,
185
172
  ):
186
173
  """Compute residue axes using cached static topology.
187
174
 
@@ -195,7 +182,6 @@ class AxesCalculator:
195
182
  mol: Current-frame molecule fragment.
196
183
  residue_atoms: AtomGroup for the residue in the current frame.
197
184
  topology: Cached ``ResidueAxesTopology`` for this residue.
198
- box: Current periodic box lengths. If omitted, ``u.dimensions`` is used.
199
185
 
200
186
  Returns:
201
187
  Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
@@ -204,24 +190,10 @@ class AxesCalculator:
204
190
  - center: Residue centre, shape ``(3,)``.
205
191
  - moment_of_inertia: Principal moments, shape ``(3,)``.
206
192
  """
207
- dimensions = (
208
- np.asarray(box, dtype=float)
209
- if box is not None
210
- else np.asarray(u.dimensions[:3], dtype=float)
211
- )
212
193
  center = residue_atoms.center_of_mass(unwrap=True)
213
194
 
214
195
  if not topology.has_neighbor_bonds:
215
- heavy_atoms = u.atoms[topology.residue_heavy_indices]
216
- moment_of_inertia_tensor = self.get_moment_of_inertia_tensor(
217
- center_of_mass=center,
218
- positions=heavy_atoms.positions,
219
- masses=topology.residue_ua_masses,
220
- dimensions=dimensions,
221
- )
222
- rot_axes, moment_of_inertia = self.get_principal_axes_from_tensor(
223
- moment_of_inertia_tensor
224
- )
196
+ rot_axes, moment_of_inertia = self.get_molecule_axes(residue_atoms)
225
197
  trans_axes = rot_axes
226
198
  else:
227
199
  make_whole(mol.atoms)
@@ -277,7 +249,7 @@ class AxesCalculator:
277
249
 
278
250
  index = int(index) # UA bead index
279
251
  heavy_atoms = data_container.select_atoms("mass 2 to 999")
280
- # use the same customPI trans axes as the residue level
252
+ # use the same trans axes as the residue level
281
253
  if len(heavy_atoms) > 1:
282
254
  if len(data_container.residues) == 1:
283
255
  # only the one residue => use principal axes
@@ -411,16 +383,7 @@ class AxesCalculator:
411
383
  heavy_atom = u.atoms[int(topology.heavy_atom_index)]
412
384
 
413
385
  if len(heavy_atoms) > 1:
414
- center = residue_atoms.center_of_mass(unwrap=True)
415
- moment_of_inertia_tensor = self.get_moment_of_inertia_tensor(
416
- center_of_mass=center,
417
- positions=heavy_atoms.positions,
418
- masses=topology.residue_ua_masses,
419
- dimensions=dimensions,
420
- )
421
- trans_axes, _moment_of_inertia = self.get_principal_axes_from_tensor(
422
- moment_of_inertia_tensor
423
- )
386
+ trans_axes = self.get_principal_axes_from_group(residue_atoms)
424
387
  else:
425
388
  make_whole(residue_atoms)
426
389
  trans_axes = self.get_principal_axes_from_group(residue_atoms)
@@ -921,8 +884,8 @@ class AxesCalculator:
921
884
 
922
885
  Args:
923
886
  center_of_mass: (3, ) COM for bead
924
- positions: (N,3) positions of the UAs in the bead
925
- masses: (N,) masses of the UAs in the bead
887
+ positions: (N,3) positions of the atoms in the bead
888
+ masses: (N,) masses of the atoms in the bead
926
889
  custom_rot_axes: (3,3) array of residue rotation axes
927
890
  dimensions: (3,) simulation_box_dimensions
928
891
 
@@ -1137,30 +1100,6 @@ class AxesCalculator:
1137
1100
  )
1138
1101
  return principal_axes
1139
1102
 
1140
- def get_UA_masses(self, molecule) -> list[float]:
1141
- """Return united-atom (UA) masses for a molecule.
1142
-
1143
- For a given molecule, return a list of masses of UAs (combination of the
1144
- heavy atoms + bonded hydrogen atoms). This list is used to get the moment
1145
- of inertia tensor for molecules larger than one UA.
1146
-
1147
- Args:
1148
- molecule: MDAnalysis AtomGroup representing the molecule.
1149
-
1150
- Returns:
1151
- list[float]: UA masses for each heavy atom.
1152
- """
1153
- ua_masses: list[float] = []
1154
- for atom in molecule:
1155
- if atom.mass > 1.1:
1156
- ua_mass = float(atom.mass)
1157
- bonded_atoms = molecule.select_atoms(f"bonded index {atom.index}")
1158
- bonded_h_atoms = bonded_atoms.select_atoms("mass 1 to 1.1")
1159
- for h in bonded_h_atoms:
1160
- ua_mass += float(h.mass)
1161
- ua_masses.append(ua_mass)
1162
- return ua_masses
1163
-
1164
1103
  def get_chain(self, residue, first, last):
1165
1104
  """
1166
1105
  For a given MDAnalysis AtomGroup and two given heavy atoms
@@ -578,7 +578,6 @@ class FrameCovarianceNode:
578
578
  relative_res_i=relative_res_i,
579
579
  axes_manager=axes_manager,
580
580
  axes_topology=axes_topology,
581
- box=box,
582
581
  customised_axes=customised_axes,
583
582
  )
584
583
 
@@ -615,7 +614,6 @@ class FrameCovarianceNode:
615
614
  relative_res_i: int,
616
615
  axes_manager: Any,
617
616
  axes_topology: Any | None,
618
- box: np.ndarray | None,
619
617
  customised_axes: bool,
620
618
  ) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
621
619
  """Return axes, centre, and inertia data for a residue bead.
@@ -630,7 +628,6 @@ class FrameCovarianceNode:
630
628
  might differ from residue index of first residue in topology.
631
629
  axes_manager: Axes helper used to select axes, centres, and moments.
632
630
  axes_topology: Optional cached axes topology generated during static setup.
633
- box: Optional periodic box vector.
634
631
  customised_axes: Whether customised residue axes should be used.
635
632
 
636
633
  Returns:
@@ -644,11 +641,7 @@ class FrameCovarianceNode:
644
641
 
645
642
  if residue_topology is not None:
646
643
  return axes_manager.get_residue_axes_from_topology(
647
- u=u,
648
- mol=mol,
649
- residue_atoms=res.atoms,
650
- topology=residue_topology,
651
- box=box,
644
+ u=u, mol=mol, residue_atoms=res.atoms, topology=residue_topology
652
645
  )
653
646
 
654
647
  return axes_manager.get_residue_axes(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: CodeEntropy
3
- Version: 2.6.1
3
+ Version: 2.7.1
4
4
  Summary: CodeEntropy is a Python package for computing the configurational entropy of macromolecular systems using forces sampled from molecular dynamics (MD) simulations. It implements the multiscale cell correlation method to provide accurate and efficient entropy estimates, supporting a wide range of applications in molecular simulation and statistical mechanics.
5
5
  Keywords: entropy,macromolecular systems,MD simulation
6
6
  Author-email: Arghya 'Argo' Chakravorty <arghyac@umich.edu>, Donald Chung-HK <donald.chung@stfc.ac.uk>, Sarah Fegan <sarah.fegan@stfc.ac.uk>, James Gebbie-Rayet <james.gebbie@stfc.ac.uk>, Sarah Harris <sarah.harris@sheffield.ac.uk>, Richard Henchman <rhen7213@uni.sydney.edu.au>, Jonathan Higham <j.higham4@lancaster.ac.uk>, Jas Kalayan <jas.kalayan@stfc.ac.uk>, Ioana Papa <iapapa1@sheffield.ac.uk>
@@ -24,7 +24,7 @@ Requires-Dist: PyYAML>=6.0.3,<7.0
24
24
  Requires-Dist: rich>=13.0.0,<16.0
25
25
  Requires-Dist: art>=5.0,<7.0
26
26
  Requires-Dist: networkx>=2.8,<4.0
27
- Requires-Dist: waterEntropy>=2,<3.0
27
+ Requires-Dist: waterEntropy>=2.3.0,<3.0
28
28
  Requires-Dist: requests>=2.32.2,<3.0
29
29
  Requires-Dist: rdkit>=2025.3.4,<2027
30
30
  Requires-Dist: numba>=0.63.0,<0.70
@@ -32,9 +32,8 @@ Requires-Dist: dask>=2025.7.0,<2027.1.0
32
32
  Requires-Dist: dask-jobqueue>=0.9.0,<1.0
33
33
  Requires-Dist: distributed>=2025.7.0,<2027.1.0
34
34
  Requires-Dist: sphinx>=8.0.0,<10.0 ; extra == "docs"
35
- Requires-Dist: nbsphinx>=0.9.3,<1.0 ; extra == "docs"
36
- Requires-Dist: sphinx_copybutton>=0.5,<1.0 ; extra == "docs"
37
- Requires-Dist: furo>=2025.12.19,<2026.0 ; extra == "docs"
35
+ Requires-Dist: sphinx-autoapi>=3.8,<4.0 ; extra == "docs"
36
+ Requires-Dist: ccpbiosim-sphinx-theme>=1.3.0,<1.4.0 ; extra == "docs"
38
37
  Requires-Dist: markupsafe>=3.0,<4.0 ; extra == "docs"
39
38
  Requires-Dist: pre-commit>=3.5.0,<5.0 ; extra == "pre-commit"
40
39
  Requires-Dist: ruff>=0.15.2,<1.0 ; extra == "pre-commit"
@@ -56,7 +55,7 @@ CodeEntropy
56
55
 
57
56
  | Category | Badges |
58
57
  |----------------|--------|
59
- | **Build** | [![PR Checks](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/pr.yaml/badge.svg)](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/pr.yaml) [![Daily Tests](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/daily.yaml/badge.svg)](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/daily.yaml) [![Dependency Floors](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/dependency-floors.yaml/badge.svg)](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/dependency-floors.yaml) |
58
+ | **Build** | [![PR Checks](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/pr.yaml/badge.svg)](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/pr.yaml) [![Weekly Tests](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/weekly-tests.yaml/badge.svg)](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/weekly-tests.yaml) |
60
59
  | **Regression** | [![Weekly Regression](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/weekly-regression.yaml/badge.svg)](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/weekly-regression.yaml) |
61
60
  | **Documentation** | [![Weekly Docs](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/weekly-docs.yaml/badge.svg)](https://github.com/CCPBioSim/CodeEntropy/actions/workflows/weekly-docs.yaml) [![Docs - Status](https://app.readthedocs.org/projects/codeentropy/badge/?version=latest)](https://codeentropy.readthedocs.io/en/latest/?badge=latest) |
62
61
  | **Citation** | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17570721.svg)](https://doi.org/10.5281/zenodo.17570721) |
@@ -67,8 +66,8 @@ CodeEntropy
67
66
  CodeEntropy is a Python package for computing the configurational entropy of macromolecular systems using forces sampled from molecular dynamics (MD) simulations. It implements the multiscale cell correlation method to provide accurate and efficient entropy estimates, supporting a wide range of applications in molecular simulation and statistical mechanics.
68
67
 
69
68
  <p align="center">
70
- <img src="docs/_static/logos/biosim-codeentropy_logo_light.png#gh-dark-mode-only" alt="CodeEntropy logo" width="300"/>
71
- <img src="docs/_static/logos/biosim-codeentropy_logo_dark.png#gh-light-mode-only" alt="CodeEntropy logo" width="300"/>
69
+ <img src="docs/source/_static/logos/biosim-codeentropy_logo_light.png#gh-dark-mode-only" alt="CodeEntropy logo" width="300"/>
70
+ <img src="docs/source/_static/logos/biosim-codeentropy_logo_dark.png#gh-light-mode-only" alt="CodeEntropy logo" width="300"/>
72
71
  </p>
73
72
 
74
73
  See [CodeEntropy’s documentation](https://codeentropy.readthedocs.io/en/latest/) for more information.
@@ -1,8 +1,8 @@
1
- CodeEntropy/__init__.py,sha256=O-4D_PlAbU4SziMxQkWeRCo1K56owvqUS8OeDGTRw4Y,404
1
+ CodeEntropy/__init__.py,sha256=3IcxfleI07bxBR3P5EA6vG13VTtfYGCe1q41Cg4gCSE,404
2
2
  CodeEntropy/__main__.py,sha256=5i_ZrxQaq0q2aPllbB4SZ6BApV6oUFCgx0cGyjfMPrU,108
3
3
  CodeEntropy/cli.py,sha256=nSshc8P7F7n3jAW36vzwXsFdffLfFdCpkfLvA-tJb3c,1318
4
4
  CodeEntropy/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- CodeEntropy/config/argparse.py,sha256=SBDTrFpEStgKeremqhpHA8ZWTJGH6IirthLFFcTitFY,19695
5
+ CodeEntropy/config/argparse.py,sha256=gCIUlQzMnUAYm7o-Mk2QKOP_HItc7-c1WGCe-YgEvbE,19927
6
6
  CodeEntropy/config/runtime.py,sha256=1lfLy57vv6nF6ND0cspGpIWQdfwj_ZiZpU9GohfvkwI,14914
7
7
  CodeEntropy/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  CodeEntropy/core/dask_clusters.py,sha256=FsvLyYQPImTWRf9J4x7wUILqf3syS0Ji5JUsJN-Qp1A,8992
@@ -12,15 +12,15 @@ CodeEntropy/entropy/configurational.py,sha256=3erd1Ul4sGL5BMBDYq33f27aRTZqiEb6hv
12
12
  CodeEntropy/entropy/graph.py,sha256=LeDF2KxxNVgpetrIE9j0dnW64UhGywDLqoBJEf54vtc,4612
13
13
  CodeEntropy/entropy/orientational.py,sha256=gfpYqCKQjAAx22rrUdbiLvzfEIXy1nwJoub1rgYKCvY,3415
14
14
  CodeEntropy/entropy/vibrational.py,sha256=WeQJ1bKQPSxPrREJ8CDhk9Ph2xeunrWZ0zu76y-H6Ow,9733
15
- CodeEntropy/entropy/water.py,sha256=Ob3V08DyQNSWDMqpQ27rqjgHeU5AlKZfjqf9EqUdgqc,8225
16
- CodeEntropy/entropy/workflow.py,sha256=bxg8AVXGk7uwlv4u2AZ4kTQ26PMge_Z5ubWghdLtn9U,16100
15
+ CodeEntropy/entropy/water.py,sha256=B2VbMYFH8umXO8r2KXHIsq26MpX5Q6w76LjABNg_KDU,8401
16
+ CodeEntropy/entropy/workflow.py,sha256=Xypn5Gd7LpVXgoO_sawUBNXehEGv0F8paZ658VnQTF4,16311
17
17
  CodeEntropy/entropy/nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  CodeEntropy/entropy/nodes/aggregate.py,sha256=4SyXP1_bM0IesOuqflRLvPgEfFu0PmKiEm4EFgnNxwg,3062
19
19
  CodeEntropy/entropy/nodes/configurational.py,sha256=-3j2ji_p-twPjZyjQ1T3tgN0pYLSIof9any1w5NI2as,7135
20
20
  CodeEntropy/entropy/nodes/orientational.py,sha256=yPN_XRJ1LOxJ7hOE2cnsjIbgQlI2avM1g3mFbGhW6fM,2481
21
21
  CodeEntropy/entropy/nodes/vibrational.py,sha256=3uhRqaMpK8u7QK2SDQ6RLRcr2rS3sPh6-GlTaNdTFWw,16978
22
22
  CodeEntropy/levels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- CodeEntropy/levels/axes.py,sha256=wmotkCwWcc7RzicWJQzXVwYFqkyw9WqWpyeRF1NB3zU,50338
23
+ CodeEntropy/levels/axes.py,sha256=2ws9a_n45ZHH4ya4DCttqEosHSqN_TrJO6dPHSbEeKE,47839
24
24
  CodeEntropy/levels/forces.py,sha256=c7XnNIBTFCHHXllr1WxTIrxEV_CkUB2b1vdFO8hUofY,11595
25
25
  CodeEntropy/levels/hierarchy.py,sha256=3cd4t6Tywg7VMgw4TboFF5VAHdhG4FaGBXsMptchisY,5158
26
26
  CodeEntropy/levels/linalg.py,sha256=PJlrKtIOYcYDycW3Tbetm6k94FKFZTq-hm28qiu_tS0,3565
@@ -47,7 +47,7 @@ CodeEntropy/levels/nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
47
47
  CodeEntropy/levels/nodes/accumulators.py,sha256=XM7phCAIo0RK9YAtx2wrdo2oinmpwXYrH9mp1_LQD7U,6259
48
48
  CodeEntropy/levels/nodes/axes_topology.py,sha256=QzrWbCL9YA8fzF4_WWpQGaIAAsOnjY6cVH7INDE40dk,11285
49
49
  CodeEntropy/levels/nodes/beads.py,sha256=9Ow065FY4jrIqPKCZJCvDNfIekJ17OBSX-bmEFsxtbc,8010
50
- CodeEntropy/levels/nodes/covariance.py,sha256=EY_-Ps-e4qtI9RIhV47j7cuvP3znJovGt6kK6yC77sU,30294
50
+ CodeEntropy/levels/nodes/covariance.py,sha256=T42iaL3AEswDp6qvI5uuTTKzksnjaJdEuQvNqsQjT_M,30100
51
51
  CodeEntropy/levels/nodes/detect_levels.py,sha256=YrM5SSceLiMqbOhr8Fy6SV-E_zkKRpvgHfDT8Grbin8,1864
52
52
  CodeEntropy/levels/nodes/detect_molecules.py,sha256=jILCddEicVngA7FjvQzafbG8HslaRICpT6hj2Uyi6YY,3059
53
53
  CodeEntropy/molecules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -58,8 +58,8 @@ CodeEntropy/trajectory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
58
58
  CodeEntropy/trajectory/frames.py,sha256=MSx_swzFjo4TgkZTR1y6W-1zuKNPg_C36I_uFqvOKpk,4354
59
59
  CodeEntropy/trajectory/mda.py,sha256=epKpAzxkNQi3rE7HJc_tsK_ZY4c575LdXmWewJoP1qE,16954
60
60
  CodeEntropy/trajectory/source.py,sha256=NfYsdm1amr29h2tmJP-RKyCp3phb1SOAtAELJmGm740,1475
61
- codeentropy-2.6.1.dist-info/entry_points.txt,sha256=8Oa3H9ErsrGtx5Hc6hIHOw73wK3Ylkvfgtl_4cBb_GU,52
62
- codeentropy-2.6.1.dist-info/licenses/LICENSE,sha256=hgMaAAVW1Q6dL586OHoz8vFO-6BYn-d2aAFBpVQylFc,1072
63
- codeentropy-2.6.1.dist-info/WHEEL,sha256=lqN8jXt_QloFOGcx9kStvWbryhfEXoI2F2z-YURm350,81
64
- codeentropy-2.6.1.dist-info/METADATA,sha256=2spkZSwrKSZBksOlmjh2GBsJVDbFtRzxQKJhFJa5qk8,6547
65
- codeentropy-2.6.1.dist-info/RECORD,,
61
+ codeentropy-2.7.1.dist-info/entry_points.txt,sha256=8Oa3H9ErsrGtx5Hc6hIHOw73wK3Ylkvfgtl_4cBb_GU,52
62
+ codeentropy-2.7.1.dist-info/licenses/LICENSE,sha256=hgMaAAVW1Q6dL586OHoz8vFO-6BYn-d2aAFBpVQylFc,1072
63
+ codeentropy-2.7.1.dist-info/WHEEL,sha256=rLJE8OLPBZbz7tqxs1yD-wA-ADa1Ec5PuYU-Y_PNWDI,81
64
+ codeentropy-2.7.1.dist-info/METADATA,sha256=_vGCZ5Gsa404J5KCRQreC2fmA6LMH1zEwnhO_imSeyw,6336
65
+ codeentropy-2.7.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: flit 4.1.0
2
+ Generator: flit 4.2.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any