westpa 2022.8__cp311-cp311-macosx_10_9_x86_64.whl → 2022.10__cp311-cp311-macosx_10_9_x86_64.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.
Potentially problematic release.
This version of westpa might be problematic. Click here for more details.
- westpa/_version.py +3 -3
- westpa/analysis/core.py +3 -3
- westpa/cli/core/w_states.py +1 -1
- westpa/cli/tools/w_ipa.py +4 -4
- westpa/cli/tools/w_pdist.py +8 -2
- westpa/core/_rc.py +18 -2
- westpa/core/binning/_assign.cpython-311-darwin.so +0 -0
- westpa/core/binning/mab.py +188 -64
- westpa/core/binning/mab_manager.py +3 -0
- westpa/core/data_manager.py +5 -1
- westpa/core/h5io.py +4 -2
- westpa/core/kinetics/_kinetics.cpython-311-darwin.so +0 -0
- westpa/core/propagators/executable.py +5 -4
- westpa/core/reweight/_reweight.cpython-311-darwin.so +0 -0
- westpa/core/sim_manager.py +24 -12
- westpa/fasthist/_fasthist.cpython-311-darwin.so +0 -0
- westpa/mclib/_mclib.cpython-311-darwin.so +0 -0
- westpa/trajtree/_trajtree.cpython-311-darwin.so +0 -0
- westpa/westext/hamsm_restarting/restart_driver.py +9 -4
- westpa/westext/stringmethod/string_method.py +5 -1
- westpa/work_managers/processes.py +48 -44
- {westpa-2022.8.dist-info → westpa-2022.10.dist-info}/METADATA +5 -5
- {westpa-2022.8.dist-info → westpa-2022.10.dist-info}/RECORD +28 -28
- {westpa-2022.8.dist-info → westpa-2022.10.dist-info}/AUTHORS +0 -0
- {westpa-2022.8.dist-info → westpa-2022.10.dist-info}/LICENSE +0 -0
- {westpa-2022.8.dist-info → westpa-2022.10.dist-info}/WHEEL +0 -0
- {westpa-2022.8.dist-info → westpa-2022.10.dist-info}/entry_points.txt +0 -0
- {westpa-2022.8.dist-info → westpa-2022.10.dist-info}/top_level.txt +0 -0
westpa/_version.py
CHANGED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-
|
|
11
|
+
"date": "2024-05-30T14:33:52-0400",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2022.
|
|
14
|
+
"full-revisionid": "40fe71e4e393b47e0a231b178add25696e469405",
|
|
15
|
+
"version": "2022.10"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
westpa/analysis/core.py
CHANGED
|
@@ -298,8 +298,8 @@ class Iteration:
|
|
|
298
298
|
def basis_state_summaries(self):
|
|
299
299
|
"""pd.DataFrame: Basis state summary data."""
|
|
300
300
|
df = pd.DataFrame(self.h5group['ibstates']['bstate_index'][:])
|
|
301
|
-
df['label'] =
|
|
302
|
-
df['auxref'] =
|
|
301
|
+
df['label'] = df['label'].str.decode('UTF-8')
|
|
302
|
+
df['auxref'] = df['auxref'].str.decode('UTF-8')
|
|
303
303
|
return df
|
|
304
304
|
|
|
305
305
|
@property
|
|
@@ -325,7 +325,7 @@ class Iteration:
|
|
|
325
325
|
"""pd.DataFrame or None: Target state summary data."""
|
|
326
326
|
if self.has_target_states:
|
|
327
327
|
df = pd.DataFrame(self.h5group['tstates']['index'][:])
|
|
328
|
-
df['label'] =
|
|
328
|
+
df['label'] = df['label'].str.decode('UTF-8')
|
|
329
329
|
|
|
330
330
|
return df
|
|
331
331
|
else:
|
westpa/cli/core/w_states.py
CHANGED
|
@@ -157,7 +157,7 @@ def initialize(mode, bstates, _bstate_file, tstates, _tstate_file):
|
|
|
157
157
|
bstate.probability *= pscale
|
|
158
158
|
|
|
159
159
|
# Assign progress coordinates to basis states
|
|
160
|
-
sim_manager.get_bstate_pcoords(basis_states
|
|
160
|
+
sim_manager.get_bstate_pcoords(basis_states)
|
|
161
161
|
data_manager.create_ibstate_group(basis_states, n_iter)
|
|
162
162
|
sim_manager.report_basis_states(basis_states)
|
|
163
163
|
|
westpa/cli/tools/w_ipa.py
CHANGED
|
@@ -157,11 +157,11 @@ class WIPI(WESTParallelTool):
|
|
|
157
157
|
# print(str(to_hash).encode('base64'))
|
|
158
158
|
if self.debug_mode:
|
|
159
159
|
for iarg, arg in enumerate(to_hash):
|
|
160
|
-
if
|
|
161
|
-
print('arg {num:02d} -- {arg:<20}'.format(num=iarg, arg=arg))
|
|
162
|
-
else:
|
|
160
|
+
if isinstance(arg, list):
|
|
163
161
|
for il, l in enumerate(arg):
|
|
164
|
-
print('arg {num:02d} -- {arg:<20}'.format(num=il + iarg, arg=l))
|
|
162
|
+
print('arg {num:02d} -- {arg:<20}'.format(num=il + iarg, arg=h5io.tostr(l)))
|
|
163
|
+
else:
|
|
164
|
+
print('arg {num:02d} -- {arg:<20}'.format(num=iarg, arg=h5io.tostr(arg)))
|
|
165
165
|
# print('args: {}'.format(to_hash))
|
|
166
166
|
# This SHOULD produce the same output, maybe? That would be nice, anyway.
|
|
167
167
|
# But we'll need to test it more.
|
westpa/cli/tools/w_pdist.py
CHANGED
|
@@ -423,7 +423,10 @@ Command-line options
|
|
|
423
423
|
lb, ub = self.data_range[idim]
|
|
424
424
|
# Advance just beyond the upper bound of the range, so that we catch
|
|
425
425
|
# the maximum in the histogram
|
|
426
|
-
ub
|
|
426
|
+
if ub > 0:
|
|
427
|
+
ub *= 1.01
|
|
428
|
+
else:
|
|
429
|
+
ub /= 1.01
|
|
427
430
|
|
|
428
431
|
boundset = np.linspace(lb, ub, bins + 1)
|
|
429
432
|
midpoints = (boundset[:-1] + boundset[1:]) / 2.0
|
|
@@ -440,7 +443,10 @@ Command-line options
|
|
|
440
443
|
lb, ub = self.data_range[idim]
|
|
441
444
|
# Advance just beyond the upper bound of the range, so that we catch
|
|
442
445
|
# the maximum in the histogram
|
|
443
|
-
ub
|
|
446
|
+
if ub > 0:
|
|
447
|
+
ub *= 1.01
|
|
448
|
+
else:
|
|
449
|
+
ub /= 1.01
|
|
444
450
|
|
|
445
451
|
boundset = np.linspace(lb, ub, bins[idim] + 1)
|
|
446
452
|
midpoints = (boundset[:-1] + boundset[1:]) / 2.0
|
westpa/core/_rc.py
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"""WEST run control and configuration routines"""
|
|
2
2
|
|
|
3
|
-
import errno
|
|
4
|
-
import logging
|
|
5
3
|
import math
|
|
6
4
|
import os
|
|
7
5
|
import sys
|
|
6
|
+
import errno
|
|
7
|
+
import logging
|
|
8
8
|
import warnings
|
|
9
9
|
from copy import deepcopy
|
|
10
|
+
from datetime import timedelta
|
|
10
11
|
|
|
11
12
|
import numpy as np
|
|
12
13
|
|
|
@@ -231,6 +232,21 @@ class WESTRC:
|
|
|
231
232
|
self.config_logging()
|
|
232
233
|
self.config['args'] = {k: v for k, v in args.__dict__.items() if not k.startswith('_')}
|
|
233
234
|
self.process_config()
|
|
235
|
+
self.time_config()
|
|
236
|
+
|
|
237
|
+
def time_config(self):
|
|
238
|
+
'''Convert non-pyYAML accepted time formats into seconds'''
|
|
239
|
+
max_run_wallclock = self.config.get(['west', 'propagation', 'max_run_wallclock'], None)
|
|
240
|
+
if isinstance(max_run_wallclock, str):
|
|
241
|
+
time_formats = ['days', 'hours', 'minutes', 'seconds']
|
|
242
|
+
wallclock_str = max_run_wallclock.split(':')
|
|
243
|
+
kwargs = {key: int(val) for key, val in zip(time_formats[-len(wallclock_str) :], wallclock_str)}
|
|
244
|
+
try:
|
|
245
|
+
diff = int(timedelta(**kwargs).total_seconds())
|
|
246
|
+
self.config['west']['propagation']['max_run_wallclock'] = diff
|
|
247
|
+
log.debug(f'Automatically converted {max_run_wallclock=} to {diff}')
|
|
248
|
+
except ValueError:
|
|
249
|
+
log.debug(f'Failed to convert {max_run_wallclock=} to seconds.')
|
|
234
250
|
|
|
235
251
|
def process_config(self):
|
|
236
252
|
log.debug('config: {!r}'.format(self.config))
|
|
Binary file
|
westpa/core/binning/mab.py
CHANGED
|
@@ -8,21 +8,161 @@ from os.path import expandvars
|
|
|
8
8
|
log = logging.getLogger(__name__)
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
class MABBinMapper(FuncBinMapper):
|
|
12
|
+
"""
|
|
13
|
+
Adaptively place bins in between minimum and maximum segments along
|
|
14
|
+
the progress coordinte. Extrema and bottleneck segments are assigned
|
|
15
|
+
to their own bins.
|
|
16
|
+
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
nbins,
|
|
22
|
+
direction=None,
|
|
23
|
+
skip=None,
|
|
24
|
+
bottleneck=True,
|
|
25
|
+
pca=False,
|
|
26
|
+
mab_log=False,
|
|
27
|
+
bin_log=False,
|
|
28
|
+
bin_log_path="$WEST_SIM_ROOT/binbounds.log",
|
|
29
|
+
):
|
|
30
|
+
"""
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
nbins : list of int
|
|
34
|
+
List of int for nbins in each dimension.
|
|
35
|
+
direction : Union(list of int, None), default: None
|
|
36
|
+
List of int for 'direction' in each dimension.
|
|
37
|
+
Direction options are as follows:
|
|
38
|
+
0 : default split at leading and lagging boundaries
|
|
39
|
+
1 : split at leading boundary only
|
|
40
|
+
-1 : split at lagging boundary only
|
|
41
|
+
86 : no splitting at either leading or lagging boundary
|
|
42
|
+
skip : Union(list of int, None), default: None
|
|
43
|
+
List of int for each dimension. Default None for skip=0.
|
|
44
|
+
Set to 1 to 'skip' running mab in a dimension.
|
|
45
|
+
bottleneck : bool, default: True
|
|
46
|
+
Whether to turn on or off bottleneck walker splitting.
|
|
47
|
+
pca : bool, default: False
|
|
48
|
+
Can be True or False (default) to run PCA on pcoords before bin assignment.
|
|
49
|
+
mab_log : bool, default: False
|
|
50
|
+
Whether to output mab info to west.log.
|
|
51
|
+
bin_log : bool, default: False
|
|
52
|
+
Whether to output mab bin boundaries to bin_log_path file.
|
|
53
|
+
bin_log_path : str, default: "$WEST_SIM_ROOT/binbounds.log"
|
|
54
|
+
Path to output bin boundaries.
|
|
55
|
+
|
|
56
|
+
"""
|
|
57
|
+
# Verifying parameters
|
|
58
|
+
if nbins is None:
|
|
59
|
+
raise ValueError("nbins_per_dim is missing")
|
|
60
|
+
ndim = len(nbins)
|
|
61
|
+
|
|
62
|
+
if direction is None:
|
|
63
|
+
direction = [0] * ndim
|
|
64
|
+
elif len(direction) != ndim:
|
|
65
|
+
direction = [0] * ndim
|
|
66
|
+
log.warning("Direction list is not the correct dimensions, setting to defaults.")
|
|
67
|
+
|
|
68
|
+
if skip is None:
|
|
69
|
+
skip = [0] * ndim
|
|
70
|
+
elif len(skip) != ndim:
|
|
71
|
+
skip = [0] * ndim
|
|
72
|
+
log.warning("Skip list is not the correct dimensions, setting to defaults.")
|
|
73
|
+
|
|
74
|
+
kwargs = dict(
|
|
75
|
+
nbins_per_dim=nbins,
|
|
76
|
+
direction=direction,
|
|
77
|
+
skip=skip,
|
|
78
|
+
bottleneck=bottleneck,
|
|
79
|
+
pca=pca,
|
|
80
|
+
mab_log=mab_log,
|
|
81
|
+
bin_log=bin_log,
|
|
82
|
+
bin_log_path=bin_log_path,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
n_total_bins = self.determine_total_bins(**kwargs)
|
|
86
|
+
|
|
87
|
+
super().__init__(map_mab, n_total_bins, kwargs=kwargs)
|
|
88
|
+
|
|
89
|
+
def determine_total_bins(self, nbins_per_dim, direction, skip, bottleneck, **kwargs):
|
|
90
|
+
"""
|
|
91
|
+
The following is neccessary because functional bin mappers need to "reserve"
|
|
92
|
+
bins and tell the sim manager how many bins they will need to use, this is
|
|
93
|
+
determined by taking all direction/skipping info into account.
|
|
94
|
+
|
|
95
|
+
Parameters
|
|
96
|
+
----------
|
|
97
|
+
nbins_per_dim : int
|
|
98
|
+
Number of total bins in each direction.
|
|
99
|
+
direction : list of int
|
|
100
|
+
Direction in each dimension. See __init__ for more information.
|
|
101
|
+
skip : list of int
|
|
102
|
+
List of 0s and 1s indicating whether to skip each dimension.
|
|
103
|
+
bottleneck : bool
|
|
104
|
+
Whether to include separate bin for bottleneck walker(s).
|
|
105
|
+
**kwargs : dict
|
|
106
|
+
Arbitary keyword arguments. Contains unneeded MAB parameters.
|
|
107
|
+
|
|
108
|
+
Returns
|
|
109
|
+
-------
|
|
110
|
+
n_total_bins : int
|
|
111
|
+
Number of total bins.
|
|
112
|
+
|
|
113
|
+
"""
|
|
114
|
+
n_total_bins = np.prod(nbins_per_dim)
|
|
115
|
+
ndim = len(nbins_per_dim)
|
|
116
|
+
for i in range(ndim):
|
|
117
|
+
if skip[i] == 0:
|
|
118
|
+
if direction[i] != 0:
|
|
119
|
+
n_total_bins += 1 + 1 * bottleneck
|
|
120
|
+
else:
|
|
121
|
+
n_total_bins += 2 + 2 * bottleneck
|
|
122
|
+
else:
|
|
123
|
+
n_total_bins -= nbins_per_dim[i] - 1
|
|
124
|
+
n_total_bins += 1 * ndim # or else it will be one bin short
|
|
125
|
+
return n_total_bins
|
|
126
|
+
|
|
127
|
+
|
|
11
128
|
def map_mab(coords, mask, output, *args, **kwargs):
|
|
12
|
-
|
|
129
|
+
"""
|
|
130
|
+
Binning which adaptively places bins based on the positions of extrema segments and
|
|
13
131
|
bottleneck segments, which are where the difference in probability is the greatest
|
|
14
132
|
along the progress coordinate. Operates per dimension and places a fixed number of
|
|
15
133
|
evenly spaced bins between the segments with the min and max pcoord values. Extrema and
|
|
16
|
-
bottleneck segments are assigned their own bins.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
134
|
+
bottleneck segments are assigned their own bins.
|
|
135
|
+
|
|
136
|
+
Parameters
|
|
137
|
+
----------
|
|
138
|
+
coords : ndarray
|
|
139
|
+
An array with pcoord and weight info.
|
|
140
|
+
mask : ndarray
|
|
141
|
+
Array of 1 (True) and 0 (False), to filter out unwanted segment info.
|
|
142
|
+
output : list
|
|
143
|
+
The main list that, for each segment, holds the bin assignment.
|
|
144
|
+
*args : list
|
|
145
|
+
Variable length arguments.
|
|
146
|
+
**kwargs : dict
|
|
147
|
+
Arbitary keyword arguments. Contains most of the MAB-needed parameters.
|
|
148
|
+
|
|
149
|
+
Returns
|
|
150
|
+
------
|
|
151
|
+
output : list
|
|
152
|
+
The main list that, for each segment, holds the bin assignment.
|
|
153
|
+
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
# Argument Processing
|
|
22
157
|
nbins_per_dim = kwargs.get("nbins_per_dim")
|
|
23
|
-
mab_log = kwargs.get("mab_log")
|
|
24
|
-
bin_log = kwargs.get("bin_log")
|
|
25
158
|
ndim = len(nbins_per_dim)
|
|
159
|
+
pca = kwargs.get("pca", False)
|
|
160
|
+
bottleneck = kwargs.get("bottleneck", True)
|
|
161
|
+
direction = kwargs.get("direction", ([0] * ndim))
|
|
162
|
+
skip = kwargs.get("skip", ([0] * ndim))
|
|
163
|
+
mab_log = kwargs.get("mab_log", False)
|
|
164
|
+
bin_log = kwargs.get("bin_log", False)
|
|
165
|
+
bin_log_path = kwargs.get("bin_log_path", "$WEST_SIM_ROOT/binbounds.log")
|
|
26
166
|
|
|
27
167
|
if not np.any(mask):
|
|
28
168
|
return output
|
|
@@ -135,12 +275,18 @@ def map_mab(coords, mask, output, *args, **kwargs):
|
|
|
135
275
|
# which is two per dimension unless there is a direction specified
|
|
136
276
|
# in a particluar dimension, then it's just one
|
|
137
277
|
bottleneck_base = boundary_base
|
|
278
|
+
n_bottleneck_filled = 0
|
|
138
279
|
|
|
139
280
|
for i in range(0, ndim):
|
|
140
|
-
|
|
281
|
+
# for single direction, 1 boundary walker
|
|
282
|
+
if direction[i] == 1 or direction[i] == -1:
|
|
141
283
|
bottleneck_base += 1
|
|
142
|
-
|
|
284
|
+
# 2 boundary walkers with 0 direction
|
|
285
|
+
elif direction[i] == 0:
|
|
143
286
|
bottleneck_base += 2
|
|
287
|
+
# for 86 direction, no boundary walkers so offset of 0
|
|
288
|
+
elif direction[i] == 86:
|
|
289
|
+
bottleneck_base += 0
|
|
144
290
|
|
|
145
291
|
# if a dimension is being "skipped", leave only one bin total as
|
|
146
292
|
# the offset
|
|
@@ -167,36 +313,42 @@ def map_mab(coords, mask, output, *args, **kwargs):
|
|
|
167
313
|
|
|
168
314
|
# assign bottlenecks, taking directionality into account
|
|
169
315
|
if bottleneck:
|
|
170
|
-
if direction[n]
|
|
316
|
+
if direction[n] == -1:
|
|
171
317
|
if coord == flipdifflist[n]:
|
|
172
318
|
holder = bottleneck_base + n
|
|
173
319
|
special = True
|
|
320
|
+
n_bottleneck_filled += 1
|
|
174
321
|
break
|
|
175
322
|
|
|
176
|
-
if direction[n]
|
|
323
|
+
if direction[n] == 1:
|
|
177
324
|
if coord == difflist[n]:
|
|
178
325
|
holder = bottleneck_base + n
|
|
179
326
|
special = True
|
|
327
|
+
n_bottleneck_filled += 1
|
|
180
328
|
break
|
|
181
329
|
|
|
182
|
-
|
|
330
|
+
# both directions when using 0 or with
|
|
331
|
+
# special value of 86 for no lead/lag split
|
|
332
|
+
if direction[n] == 0 or direction[n] == 86:
|
|
183
333
|
if coord == difflist[n]:
|
|
184
334
|
holder = bottleneck_base + n
|
|
185
335
|
special = True
|
|
336
|
+
n_bottleneck_filled += 1
|
|
186
337
|
break
|
|
187
338
|
elif coord == flipdifflist[n]:
|
|
188
339
|
holder = bottleneck_base + n + 1
|
|
189
340
|
special = True
|
|
341
|
+
n_bottleneck_filled += 1
|
|
190
342
|
break
|
|
191
343
|
|
|
192
344
|
# assign boundary walkers, taking directionality into account
|
|
193
|
-
if direction[n]
|
|
345
|
+
if direction[n] == -1:
|
|
194
346
|
if coord == minlist[n]:
|
|
195
347
|
holder = boundary_base + n
|
|
196
348
|
special = True
|
|
197
349
|
break
|
|
198
350
|
|
|
199
|
-
elif direction[n]
|
|
351
|
+
elif direction[n] == 1:
|
|
200
352
|
if coord == maxlist[n]:
|
|
201
353
|
holder = boundary_base + n
|
|
202
354
|
special = True
|
|
@@ -212,6 +364,14 @@ def map_mab(coords, mask, output, *args, **kwargs):
|
|
|
212
364
|
special = True
|
|
213
365
|
break
|
|
214
366
|
|
|
367
|
+
# special value for direction with no lead/lag split
|
|
368
|
+
elif direction[n] == 86:
|
|
369
|
+
# westpa.rc.pstatus(f"No lead/lag split for dim {n}")
|
|
370
|
+
# westpa.rc.pflush()
|
|
371
|
+
# nornmally adds to special bin but here just leaving it forever empty
|
|
372
|
+
# holder = boundary_base + n
|
|
373
|
+
break
|
|
374
|
+
|
|
215
375
|
# the following are for the "linear" portion
|
|
216
376
|
if not special:
|
|
217
377
|
for n in range(ndim):
|
|
@@ -248,56 +408,20 @@ def map_mab(coords, mask, output, *args, **kwargs):
|
|
|
248
408
|
|
|
249
409
|
if bin_log and report:
|
|
250
410
|
if westpa.rc.sim_manager.n_iter:
|
|
251
|
-
with open(expandvars(
|
|
252
|
-
|
|
411
|
+
with open(expandvars(bin_log_path), 'a') as bb_file:
|
|
412
|
+
# Iteration Number
|
|
413
|
+
bb_file.write(f'iteration: {westpa.rc.sim_manager.n_iter}\n')
|
|
414
|
+
bb_file.write('bin boundaries: ')
|
|
253
415
|
for n in range(ndim):
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
416
|
+
# Write binbounds per dim
|
|
417
|
+
bb_file.write(f'{np.linspace(minlist[n], maxlist[n], nbins_per_dim[n] + 1)}\t')
|
|
418
|
+
# Min/Max pcoord
|
|
419
|
+
bb_file.write(f'\nmin/max pcoord: {minlist} {maxlist}\n')
|
|
420
|
+
bb_file.write(f'bottleneck bins: {n_bottleneck_filled}\n')
|
|
421
|
+
if n_bottleneck_filled > 0:
|
|
422
|
+
# Bottlenecks bins exist (passes any of the if bottleneck: checks)
|
|
423
|
+
bb_file.write(f'bottleneck pcoord: {flipdifflist} {difflist}\n\n')
|
|
258
424
|
else:
|
|
259
425
|
bb_file.write('\n')
|
|
260
426
|
|
|
261
427
|
return output
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
class MABBinMapper(FuncBinMapper):
|
|
265
|
-
'''Adaptively place bins in between minimum and maximum segments along
|
|
266
|
-
the progress coordinte. Extrema and bottleneck segments are assigned
|
|
267
|
-
to their own bins.'''
|
|
268
|
-
|
|
269
|
-
def __init__(self, nbins, direction=None, skip=None, bottleneck=True, pca=False, mab_log=False, bin_log=False):
|
|
270
|
-
# Verifying parameters
|
|
271
|
-
if nbins is None:
|
|
272
|
-
raise ValueError("nbins_per_dim is missing")
|
|
273
|
-
ndim = len(nbins)
|
|
274
|
-
|
|
275
|
-
if direction is None:
|
|
276
|
-
direction = [0] * ndim
|
|
277
|
-
elif len(direction) != ndim:
|
|
278
|
-
direction = [0] * ndim
|
|
279
|
-
log.warning("Direction list is not the correct dimensions, setting to defaults.")
|
|
280
|
-
|
|
281
|
-
if skip is None:
|
|
282
|
-
skip = [0] * ndim
|
|
283
|
-
elif len(skip) != ndim:
|
|
284
|
-
skip = [0] * ndim
|
|
285
|
-
log.warning("Skip list is not the correct dimensions, setting to defaults.")
|
|
286
|
-
|
|
287
|
-
kwargs = dict(
|
|
288
|
-
nbins_per_dim=nbins, direction=direction, skip=skip, bottleneck=bottleneck, pca=pca, mab_log=mab_log, bin_log=bin_log
|
|
289
|
-
)
|
|
290
|
-
# the following is neccessary because functional bin mappers need to "reserve"
|
|
291
|
-
# bins and tell the sim manager how many bins they will need to use, this is
|
|
292
|
-
# determined by taking all direction/skipping info into account
|
|
293
|
-
n_total_bins = np.prod(nbins)
|
|
294
|
-
for i in range(0, ndim):
|
|
295
|
-
if skip[i] == 0:
|
|
296
|
-
if direction[i] != 0:
|
|
297
|
-
n_total_bins += 1 + 1 * bottleneck
|
|
298
|
-
else:
|
|
299
|
-
n_total_bins += 2 + 2 * bottleneck
|
|
300
|
-
else:
|
|
301
|
-
n_total_bins -= nbins[i] - 1
|
|
302
|
-
n_total_bins += 1 * ndim # or else it will be one bin short
|
|
303
|
-
super().__init__(map_mab, n_total_bins, kwargs=kwargs)
|
|
@@ -11,7 +11,10 @@ log = logging.getLogger(__name__)
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class MABSimManager(WESimManager):
|
|
14
|
+
'''Subclass of WESimManager, modifying it so bin assignments will be done after all segments are done propagating.'''
|
|
15
|
+
|
|
14
16
|
def initialize_simulation(self, basis_states, target_states, start_states, segs_per_state=1, suppress_we=False):
|
|
17
|
+
'''Making sure that that the MABBinMapper is not the outer bin.'''
|
|
15
18
|
if len(target_states) > 0:
|
|
16
19
|
if isinstance(self.system.bin_mapper, MABBinMapper):
|
|
17
20
|
log.error("MABBinMapper cannot be an outer binning scheme with a target state\n")
|
westpa/core/data_manager.py
CHANGED
|
@@ -47,6 +47,7 @@ import posixpath
|
|
|
47
47
|
import sys
|
|
48
48
|
import threading
|
|
49
49
|
import time
|
|
50
|
+
import builtins
|
|
50
51
|
from operator import attrgetter
|
|
51
52
|
from os.path import relpath, dirname
|
|
52
53
|
|
|
@@ -1523,7 +1524,10 @@ def normalize_dataset_options(dsopts, path_prefix='', n_iter=0):
|
|
|
1523
1524
|
dtype = dsopts.get('dtype')
|
|
1524
1525
|
if dtype:
|
|
1525
1526
|
if isinstance(dtype, str):
|
|
1526
|
-
|
|
1527
|
+
try:
|
|
1528
|
+
dsopts['dtype'] = np.dtype(getattr(np, dtype))
|
|
1529
|
+
except AttributeError:
|
|
1530
|
+
dsopts['dtype'] = np.dtype(getattr(builtins, dtype))
|
|
1527
1531
|
else:
|
|
1528
1532
|
dsopts['dtype'] = np.dtype(dtype)
|
|
1529
1533
|
|
westpa/core/h5io.py
CHANGED
|
@@ -9,14 +9,15 @@ import socket
|
|
|
9
9
|
import sys
|
|
10
10
|
import time
|
|
11
11
|
import logging
|
|
12
|
+
import warnings
|
|
12
13
|
|
|
13
14
|
import h5py
|
|
14
15
|
import numpy as np
|
|
15
16
|
from numpy import index_exp
|
|
17
|
+
from tables import NaturalNameWarning
|
|
16
18
|
|
|
17
19
|
from mdtraj import Trajectory, join as join_traj
|
|
18
20
|
from mdtraj.utils import in_units_of, import_, ensure_type
|
|
19
|
-
from mdtraj.utils.six import string_types
|
|
20
21
|
from mdtraj.formats import HDF5TrajectoryFile
|
|
21
22
|
from mdtraj.formats.hdf5 import _check_mode, Frames
|
|
22
23
|
|
|
@@ -28,6 +29,7 @@ except ImportError:
|
|
|
28
29
|
psutil = None
|
|
29
30
|
|
|
30
31
|
log = logging.getLogger(__name__)
|
|
32
|
+
warnings.filterwarnings('ignore', category=NaturalNameWarning)
|
|
31
33
|
|
|
32
34
|
#
|
|
33
35
|
# Constants and globals
|
|
@@ -551,7 +553,7 @@ class WESTIterationFile(HDF5TrajectoryFile):
|
|
|
551
553
|
node = self._get_node(where='/', name=name)
|
|
552
554
|
data = get_item(node, slice)
|
|
553
555
|
in_units = node.attrs.units
|
|
554
|
-
if not isinstance(in_units,
|
|
556
|
+
if not isinstance(in_units, str):
|
|
555
557
|
in_units = in_units.decode()
|
|
556
558
|
data = in_units_of(data, in_units, out_units)
|
|
557
559
|
return data
|
|
Binary file
|
|
@@ -277,18 +277,19 @@ class ExecutablePropagator(WESTPropagator):
|
|
|
277
277
|
}
|
|
278
278
|
self.data_info['log'] = {'name': 'seglog', 'loader': seglog_loader, 'enabled': store_h5, 'filename': None, 'dir': False}
|
|
279
279
|
|
|
280
|
-
|
|
280
|
+
# Grab config from west.executable.datasets, else fallback to west.data.datasets.
|
|
281
|
+
dataset_configs = config.get(["west", "executable", "datasets"], config.get(['west', 'data', 'datasets'], {}))
|
|
281
282
|
for dsinfo in dataset_configs:
|
|
282
283
|
try:
|
|
283
284
|
dsname = dsinfo['name']
|
|
284
285
|
except KeyError:
|
|
285
286
|
raise ValueError('dataset specifications require a ``name`` field')
|
|
286
287
|
|
|
287
|
-
if dsname
|
|
288
|
-
check_bool(dsinfo.setdefault('enabled', True))
|
|
289
|
-
else:
|
|
288
|
+
if dsname == 'pcoord':
|
|
290
289
|
# can never disable pcoord collection
|
|
291
290
|
dsinfo['enabled'] = True
|
|
291
|
+
else:
|
|
292
|
+
check_bool(dsinfo.setdefault('enabled', True))
|
|
292
293
|
|
|
293
294
|
loader_directive = dsinfo.get('loader', None)
|
|
294
295
|
if callable(loader_directive):
|
|
Binary file
|
westpa/core/sim_manager.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
from datetime import timedelta
|
|
2
|
-
from itertools import zip_longest
|
|
3
1
|
import logging
|
|
4
2
|
import math
|
|
5
3
|
import operator
|
|
6
|
-
from pickle import PickleError
|
|
7
4
|
import random
|
|
8
5
|
import time
|
|
9
|
-
|
|
6
|
+
from datetime import timedelta
|
|
7
|
+
from pickle import PickleError
|
|
8
|
+
from itertools import zip_longest
|
|
9
|
+
from collections import Counter
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
12
|
|
|
@@ -114,28 +114,40 @@ class WESimManager:
|
|
|
114
114
|
# handles specifically the problem that causes in plugin loading.
|
|
115
115
|
try:
|
|
116
116
|
# Before checking for set membership of (priority, function.__name__, function), just check
|
|
117
|
-
# function
|
|
118
|
-
|
|
117
|
+
# function hash for collisions in this hook.
|
|
118
|
+
hook_function_hash = [hash(callback[2]) for callback in self._callback_table[hook]]
|
|
119
119
|
except KeyError:
|
|
120
120
|
# If there's no entry in self._callback_table for this hook, then there definitely aren't any collisions
|
|
121
121
|
# because no plugins are registered to it yet in the first place.
|
|
122
122
|
pass
|
|
123
123
|
else:
|
|
124
|
-
# If there are plugins registered to this hook, check for duplicate
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
# If there are plugins registered to this hook, check for duplicate hash, which will definitely have the same name, module, function.
|
|
125
|
+
try:
|
|
126
|
+
if hash(function) in hook_function_hash:
|
|
127
|
+
log.info('{!r} has already been loaded, skipping'.format(function))
|
|
128
|
+
return
|
|
129
|
+
except KeyError:
|
|
130
|
+
pass
|
|
128
131
|
|
|
129
132
|
try:
|
|
130
133
|
self._callback_table[hook].add((priority, function.__name__, function))
|
|
131
134
|
except KeyError:
|
|
132
135
|
self._callback_table[hook] = set([(priority, function.__name__, function)])
|
|
133
136
|
|
|
137
|
+
# Raise warning if there are multiple callback with same priority.
|
|
138
|
+
for priority, count in Counter([callback[0] for callback in self._callback_table[hook]]).items():
|
|
139
|
+
if count > 1:
|
|
140
|
+
log.warning(
|
|
141
|
+
f'{count} callbacks in {hook} have identical priority {priority}. The order of callback execution is not guaranteed.'
|
|
142
|
+
)
|
|
143
|
+
log.warning(f'{hook}: {self._callback_table[hook]}')
|
|
144
|
+
|
|
134
145
|
log.debug('registered callback {!r} for hook {!r}'.format(function, hook))
|
|
135
146
|
|
|
136
147
|
def invoke_callbacks(self, hook, *args, **kwargs):
|
|
137
148
|
callbacks = self._callback_table.get(hook, [])
|
|
138
|
-
|
|
149
|
+
# Sort by priority, function name, then module name
|
|
150
|
+
sorted_callbacks = sorted(callbacks, key=lambda x: (x[0], x[1], x[2].__module__))
|
|
139
151
|
for priority, name, fn in sorted_callbacks:
|
|
140
152
|
log.debug('invoking callback {!r} for hook {!r}'.format(fn, hook))
|
|
141
153
|
fn(*args, **kwargs)
|
|
@@ -404,7 +416,7 @@ class WESimManager:
|
|
|
404
416
|
)
|
|
405
417
|
|
|
406
418
|
total_prob = float(sum(segment.weight for segment in segments))
|
|
407
|
-
pstatus(f'1-prob: {1-total_prob:.4e}')
|
|
419
|
+
pstatus(f'1-prob: {1 - total_prob:.4e}')
|
|
408
420
|
|
|
409
421
|
target_counts = self.we_driver.bin_target_counts
|
|
410
422
|
# Do not include bins with target count zero (e.g. sinks, never-filled bins) in the (non)empty bins statistics
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -9,6 +9,7 @@ from westpa.cli.core import w_run
|
|
|
9
9
|
from westpa.core.extloader import get_object
|
|
10
10
|
from westpa.core.segment import Segment
|
|
11
11
|
from westpa import analysis
|
|
12
|
+
from westpa.core._rc import bins_from_yaml_dict
|
|
12
13
|
|
|
13
14
|
import json
|
|
14
15
|
|
|
@@ -266,6 +267,10 @@ def msmwe_compute_ss(plugin_config, west_files):
|
|
|
266
267
|
basis_pcoord_bounds = np.array(plugin_config.get('basis_pcoord_bounds', np.nan), dtype=float)
|
|
267
268
|
target_pcoord_bounds = np.array(plugin_config.get('target_pcoord_bounds', np.nan), dtype=float)
|
|
268
269
|
|
|
270
|
+
user_bin_mapper = plugin_config.get('user_bin_mapper', None)
|
|
271
|
+
if user_bin_mapper is not None:
|
|
272
|
+
user_bin_mapper = bins_from_yaml_dict(user_bin_mapper)
|
|
273
|
+
|
|
269
274
|
if np.isnan(basis_pcoord_bounds).any() or np.isnan(target_pcoord_bounds).any():
|
|
270
275
|
log.critical(
|
|
271
276
|
"Target and/or basis pcoord bounds were not specified. "
|
|
@@ -330,7 +335,7 @@ def msmwe_compute_ss(plugin_config, west_files):
|
|
|
330
335
|
else:
|
|
331
336
|
# FIXME: This gives the wrong shape, but loading from the clusterfile gives the right shape
|
|
332
337
|
log.debug("clustering coordinates into " + str(n_clusters) + " clusters...")
|
|
333
|
-
model.cluster_coordinates(n_clusters, streaming=streaming)
|
|
338
|
+
model.cluster_coordinates(n_clusters, streaming=streaming, user_bin_mapper=user_bin_mapper)
|
|
334
339
|
|
|
335
340
|
first_iter = 1
|
|
336
341
|
model.get_fluxMatrix(n_lag, first_iter, last_iter) # extracts flux matrix, output model.fluxMatrixRaw
|
|
@@ -790,7 +795,7 @@ class RestartDriver:
|
|
|
790
795
|
|
|
791
796
|
westpa.rc.pstatus(
|
|
792
797
|
f"\n\n===== Restart {restart_state['restarts_completed']}, "
|
|
793
|
-
+ f"Run {restart_state['runs_completed']+1} initializing =====\n"
|
|
798
|
+
+ f"Run {restart_state['runs_completed'] + 1} initializing =====\n"
|
|
794
799
|
)
|
|
795
800
|
|
|
796
801
|
westpa.rc.pstatus(
|
|
@@ -811,7 +816,7 @@ class RestartDriver:
|
|
|
811
816
|
log.info("New WE run ready!")
|
|
812
817
|
westpa.rc.pstatus(
|
|
813
818
|
f"\n\n===== Restart {restart_state['restarts_completed']}, "
|
|
814
|
-
+ f"Run {restart_state['runs_completed']+1} running =====\n"
|
|
819
|
+
+ f"Run {restart_state['runs_completed'] + 1} running =====\n"
|
|
815
820
|
)
|
|
816
821
|
|
|
817
822
|
w_run.run_simulation()
|
|
@@ -1144,7 +1149,7 @@ class RestartDriver:
|
|
|
1144
1149
|
westpa.rc.pstatus(
|
|
1145
1150
|
f"\n\n"
|
|
1146
1151
|
f"===== Restart {restart_state['restarts_completed']}, "
|
|
1147
|
-
+ f"Run {restart_state['runs_completed']+1} initializing =====\n"
|
|
1152
|
+
+ f"Run {restart_state['runs_completed'] + 1} initializing =====\n"
|
|
1148
1153
|
)
|
|
1149
1154
|
|
|
1150
1155
|
westpa.rc.pstatus(
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import multiprocessing
|
|
3
1
|
import os
|
|
4
|
-
import random
|
|
5
|
-
import signal
|
|
6
2
|
import sys
|
|
3
|
+
import random
|
|
4
|
+
import logging
|
|
7
5
|
import threading
|
|
8
6
|
import traceback
|
|
7
|
+
import multiprocessing
|
|
8
|
+
from multiprocessing.queues import Empty
|
|
9
9
|
|
|
10
10
|
import westpa.work_managers as work_managers
|
|
11
11
|
from .core import WorkManager, WMFuture
|
|
@@ -61,7 +61,7 @@ class ProcessWorkManager(WorkManager):
|
|
|
61
61
|
self.receive_thread = None
|
|
62
62
|
self.pending = None
|
|
63
63
|
|
|
64
|
-
self.shutdown_received =
|
|
64
|
+
self.shutdown_received = threading.Event()
|
|
65
65
|
self.shutdown_timeout = shutdown_timeout or 1
|
|
66
66
|
|
|
67
67
|
def task_loop(self):
|
|
@@ -74,37 +74,38 @@ class ProcessWorkManager(WorkManager):
|
|
|
74
74
|
# (re)initialize random number generator in this process
|
|
75
75
|
random.seed()
|
|
76
76
|
|
|
77
|
-
while not self.shutdown_received:
|
|
78
|
-
|
|
77
|
+
while not self.shutdown_received.is_set():
|
|
78
|
+
if not self.task_queue.empty():
|
|
79
|
+
message, task_id, fn, args, kwargs = self.task_queue.get()[:5]
|
|
79
80
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
result_tuple
|
|
89
|
-
self.result_queue.put(result_tuple)
|
|
81
|
+
if message == 'shutdown':
|
|
82
|
+
break
|
|
83
|
+
try:
|
|
84
|
+
result = fn(*args, **kwargs)
|
|
85
|
+
except BaseException as e:
|
|
86
|
+
result_tuple = ('exception', task_id, (e, traceback.format_exc()))
|
|
87
|
+
else:
|
|
88
|
+
result_tuple = ('result', task_id, result)
|
|
89
|
+
self.result_queue.put(result_tuple)
|
|
90
90
|
|
|
91
91
|
log.debug('exiting task_loop')
|
|
92
92
|
return
|
|
93
93
|
|
|
94
94
|
def results_loop(self):
|
|
95
|
-
while not self.shutdown_received:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
95
|
+
while not self.shutdown_received.is_set():
|
|
96
|
+
if not self.result_queue.empty():
|
|
97
|
+
message, task_id, payload = self.result_queue.get()[:3]
|
|
98
|
+
|
|
99
|
+
if message == 'shutdown':
|
|
100
|
+
break
|
|
101
|
+
elif message == 'exception':
|
|
102
|
+
future = self.pending.pop(task_id)
|
|
103
|
+
future._set_exception(*payload)
|
|
104
|
+
elif message == 'result':
|
|
105
|
+
future = self.pending.pop(task_id)
|
|
106
|
+
future._set_result(payload)
|
|
107
|
+
else:
|
|
108
|
+
raise AssertionError('unknown message {!r}'.format((message, task_id, payload)))
|
|
108
109
|
|
|
109
110
|
log.debug('exiting results_loop')
|
|
110
111
|
|
|
@@ -142,36 +143,38 @@ class ProcessWorkManager(WorkManager):
|
|
|
142
143
|
self.receive_thread.start()
|
|
143
144
|
|
|
144
145
|
def _empty_queues(self):
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
146
|
+
'''Empty self.task_queue and self.result_queue until queue is empty'''
|
|
147
|
+
try:
|
|
148
|
+
while True:
|
|
149
|
+
self.task_queue.get_nowait()
|
|
150
|
+
except Empty:
|
|
151
|
+
pass
|
|
150
152
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
self.result_queue.
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
try:
|
|
154
|
+
while True:
|
|
155
|
+
self.result_queue.get_nowait()
|
|
156
|
+
except Empty:
|
|
157
|
+
pass
|
|
156
158
|
|
|
157
159
|
def shutdown(self):
|
|
158
|
-
|
|
160
|
+
while self.running:
|
|
159
161
|
log.debug('shutting down {!r}'.format(self))
|
|
162
|
+
self.shutdown_received.set()
|
|
160
163
|
self._empty_queues()
|
|
161
164
|
|
|
162
165
|
# Send shutdown signal
|
|
163
166
|
for _i in range(self.n_workers):
|
|
164
|
-
self.task_queue.
|
|
167
|
+
self.task_queue.put_nowait(task_shutdown_sentinel)
|
|
165
168
|
|
|
166
169
|
for worker in self.workers:
|
|
167
170
|
worker.join(self.shutdown_timeout)
|
|
168
171
|
if worker.is_alive():
|
|
169
172
|
log.debug('sending SIGINT to worker process {:d}'.format(worker.pid))
|
|
170
|
-
|
|
173
|
+
worker.terminate()
|
|
171
174
|
worker.join(self.shutdown_timeout)
|
|
172
175
|
if worker.is_alive():
|
|
173
176
|
log.warning('sending SIGKILL to worker process {:d}'.format(worker.pid))
|
|
174
|
-
|
|
177
|
+
worker.kill()
|
|
175
178
|
worker.join()
|
|
176
179
|
|
|
177
180
|
log.debug('worker process {:d} terminated with code {:d}'.format(worker.pid, worker.exitcode))
|
|
@@ -180,4 +183,5 @@ class ProcessWorkManager(WorkManager):
|
|
|
180
183
|
|
|
181
184
|
self._empty_queues()
|
|
182
185
|
self.result_queue.put(result_shutdown_sentinel)
|
|
186
|
+
|
|
183
187
|
self.running = False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: westpa
|
|
3
|
-
Version: 2022.
|
|
3
|
+
Version: 2022.10
|
|
4
4
|
Summary: WESTPA is a package for constructing and running stochastic simulations using the "weighted ensemble" approach of Huber and Kim (1996).
|
|
5
5
|
Home-page: http://github.com/westpa/westpa
|
|
6
6
|
License: MIT
|
|
@@ -121,8 +121,8 @@ WESTPA is developed and tested on Unix-like operating systems, including Linux a
|
|
|
121
121
|
|
|
122
122
|
Regardless of the chosen method of installation, before installing WESTPA, we recommend you to first install the Python 3 version provided by the latest free `Anaconda Python distribution`_. After installing Anaconda, create a new python environment for the WESTPA install with the following::
|
|
123
123
|
|
|
124
|
-
conda create -n westpa
|
|
125
|
-
conda activate westpa
|
|
124
|
+
conda create -n westpa python=3.11
|
|
125
|
+
conda activate westpa
|
|
126
126
|
|
|
127
127
|
Then, we recommend installing WESTPA through conda or pip. Execute either of the following::
|
|
128
128
|
|
|
@@ -137,12 +137,12 @@ See the install instructions on our `wiki`_ for more detailed information.
|
|
|
137
137
|
|
|
138
138
|
To install from source (**not recommended**), start by downloading the corresponding tar.gz file from the `releases page`_. After downloading the file, unpack the file and install WESTPA by executing the following::
|
|
139
139
|
|
|
140
|
-
tar xvzf westpa-
|
|
140
|
+
tar xvzf westpa-2022.09.tar.gz
|
|
141
141
|
cd westpa
|
|
142
142
|
python -m pip install -e .
|
|
143
143
|
|
|
144
144
|
.. _`releases page`: https://github.com/westpa/westpa/releases
|
|
145
|
-
.. _`Anaconda Python distribution`: https://www.anaconda.com/
|
|
145
|
+
.. _`Anaconda Python distribution`: https://www.anaconda.com/download
|
|
146
146
|
.. _`wiki`: https://github.com/westpa/westpa/wiki/Installing-WESTPA
|
|
147
147
|
|
|
148
148
|
---------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
westpa/_version.py,sha256=
|
|
1
|
+
westpa/_version.py,sha256=59zLCh9LAH2F-_2LpdnyAOIoxNag6VO6D7dhZZILmMY,499
|
|
2
2
|
westpa/__init__.py,sha256=xyNfYIcP2ncBLu_foO1NKmJrQh8-uYdwvMuM0HsOG1M,329
|
|
3
|
-
westpa/fasthist/_fasthist.cpython-311-darwin.so,sha256=
|
|
3
|
+
westpa/fasthist/_fasthist.cpython-311-darwin.so,sha256=xxfTOjuXK4sKQas1xaWfK9fV8ddwxfO5GXoAZ41mfXg,246408
|
|
4
4
|
westpa/fasthist/__init__.py,sha256=oWj0gKEkKfHjGHwkzmpgAxDz55h2ze_sqQVzWSsOP6s,1071
|
|
5
5
|
westpa/fasthist/__main__.py,sha256=7XCBZvrKbBG3KEuQMpZD0jXa3vVMEVfZJTG8MmdbsrM,3902
|
|
6
6
|
westpa/westext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -11,14 +11,14 @@ westpa/westext/weed/BinCluster.py,sha256=sx9xzZy_ot54TkFuBrCXzAtdAwT89TQEpj2cexx
|
|
|
11
11
|
westpa/westext/weed/ProbAdjustEquil.py,sha256=eOs1lPB6hjBD44iU8KwVxR1OnaU7Kr0cuxuMVBA5PY0,4218
|
|
12
12
|
westpa/westext/adaptvoronoi/adaptVor_driver.py,sha256=xZdBJo-VcX8USB-vpBZWh1qDCMwP-_GMl7V04zaxXN4,8827
|
|
13
13
|
westpa/westext/adaptvoronoi/__init__.py,sha256=Zk7CiLsUJr3qZwZPKSqOBTOVV8uUvsMXkCbiTflMLHA,88
|
|
14
|
-
westpa/westext/stringmethod/string_method.py,sha256=
|
|
14
|
+
westpa/westext/stringmethod/string_method.py,sha256=C89D7LScQz7CZcB83kHEy3Cc8RagZNLt-rmd6yGq5WU,10415
|
|
15
15
|
westpa/westext/stringmethod/string_driver.py,sha256=8z4pEuflwRx0mb-KaRaqEk98cYUd2cvjglXDp4BRNQQ,9369
|
|
16
16
|
westpa/westext/stringmethod/__init__.py,sha256=1Nk3Uygs6GWr_FJbNH0Rss2DENurIm4WGx86V0qXxy8,310
|
|
17
17
|
westpa/westext/stringmethod/fourier_fitting.py,sha256=499B3GdZ_pYuFP6kK7ICDnL8StMHSKgrjPX9Xyl1NL8,2256
|
|
18
18
|
westpa/westext/wess/__init__.py,sha256=5nw6mcZx7eI4szw0v2q8XBusvb0Q2MUCgGKQUx2j0DE,153
|
|
19
19
|
westpa/westext/wess/ProbAdjust.py,sha256=zc0H_SURBTgxvZFQCFrXeq_pHzRDAG-ejnD6WKQGt5o,3233
|
|
20
20
|
westpa/westext/wess/wess_driver.py,sha256=3CvHfnfap3TAZGVZvkNODxozcIOEhaobn4YN_ZS-htY,8984
|
|
21
|
-
westpa/westext/hamsm_restarting/restart_driver.py,sha256=
|
|
21
|
+
westpa/westext/hamsm_restarting/restart_driver.py,sha256=c5D1I82NVo93_zPcGVtA12c2P10mK_NmkBx06upz-GU,50284
|
|
22
22
|
westpa/westext/hamsm_restarting/__init__.py,sha256=0vhEngHBLOp89Mp1CVvt9BYDPosrc1nWGZVNicKFuf8,59
|
|
23
23
|
westpa/westext/hamsm_restarting/example_overrides.py,sha256=3eDzKh_F0yNVm0lN4u0Pnrnj_WR9y4JDXa1-CU7qlbY,1065
|
|
24
24
|
westpa/tools/binning.py,sha256=oFtc_ld8b9JJUYt-AEMe4Z1L8XJ48Lsr8Iw6nTYgGNs,20718
|
|
@@ -35,45 +35,45 @@ westpa/tools/iter_range.py,sha256=nVQIvqJ9oXOALyQIFsFp_UqMjW5BBQUd1ShZttb20xo,87
|
|
|
35
35
|
westpa/core/systems.py,sha256=pb9YNFUcDhx3Fvhb0NcjlPCdhSUk41IhI0Sqdtr91q8,3693
|
|
36
36
|
westpa/core/we_driver.py,sha256=uxPTAyhZG28EfBSjKdq1EcMNhcYrvGzVK6t5jYHyKSA,40688
|
|
37
37
|
westpa/core/wm_ops.py,sha256=o_pc0BHpfCkbveTO5h76hxjXJpQgw1S-zIzVmM_u-Qc,1529
|
|
38
|
-
westpa/core/_rc.py,sha256=
|
|
38
|
+
westpa/core/_rc.py,sha256=yPdvgqZKRS10iOWTS_TYma7Y3sdKnCDDFw5AnQvog9s,25508
|
|
39
39
|
westpa/core/textio.py,sha256=lqohyyyfMTkFvTdQ8V45yUpASiJsWTh42XAG15K63dA,2434
|
|
40
40
|
westpa/core/extloader.py,sha256=yxyJN-lHo3Zjd6jS6_uhC1fIl52H-h8sbV9zYJfEWGg,2239
|
|
41
|
-
westpa/core/sim_manager.py,sha256
|
|
41
|
+
westpa/core/sim_manager.py,sha256=eeCg5dALUyZ_Rm1eRRBSOpR_0UDBnyQlBvPkWY4IlzE,38653
|
|
42
42
|
westpa/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
-
westpa/core/h5io.py,sha256=
|
|
43
|
+
westpa/core/h5io.py,sha256=s3_Rt8ZjvCpumyDMKctQl406dmo8muRiHHd0L34Qtyk,37077
|
|
44
44
|
westpa/core/trajectory.py,sha256=DL7rsowKxBc1jwT7FPZFlfCWKuwagttZxd3SPgxZKU0,10913
|
|
45
45
|
westpa/core/segment.py,sha256=Gd_5htIZ6xKxxCms9XMtJncehGvMVxZeNdy4drxrnpc,4421
|
|
46
46
|
westpa/core/progress.py,sha256=tEDDn-JPY6ZNzYqyrdgA7peo7pDu8kOMvqfyiHWUgps,6753
|
|
47
|
-
westpa/core/data_manager.py,sha256=
|
|
47
|
+
westpa/core/data_manager.py,sha256=fHgdILXZoiDyrDv34DjZqS5YyqqG6bbnUBLouqYwOFQ,71924
|
|
48
48
|
westpa/core/states.py,sha256=umsdgSrYjt2vjw-1kQeiILWmureOBmBaOgg0nQxUVmA,13318
|
|
49
49
|
westpa/core/yamlcfg.py,sha256=B78OEr1n_sIkW6kDzl3FO63tiugaT-1VutAgLxU0i7A,12696
|
|
50
50
|
westpa/core/kinetics/matrates.py,sha256=1sf7L6ojLE8yT2sFfgeB8eqgjMHdMK2O_Xgyz_RjCzc,5554
|
|
51
51
|
westpa/core/kinetics/events.py,sha256=VqYBN5rVOf3hAYUA6xQ6UN7GP6tVgRFIoP69tfGhkTo,6511
|
|
52
52
|
westpa/core/kinetics/__init__.py,sha256=djtiki7X5-IEzwjwswbdgrolwUIzVAHKxCiI5B3WH28,510
|
|
53
|
-
westpa/core/kinetics/_kinetics.cpython-311-darwin.so,sha256=
|
|
53
|
+
westpa/core/kinetics/_kinetics.cpython-311-darwin.so,sha256=pY8XITycgjA-tA9EZ9VS9GvSRLnL0ntTqsfjba6d8a8,387512
|
|
54
54
|
westpa/core/kinetics/rate_averaging.py,sha256=gIKDXBAOSDI6KythepoC4QipUPksTRBc9zbM7DRtwo4,10300
|
|
55
55
|
westpa/core/binning/binless_driver.py,sha256=T5qWpLnjxCS9RdKeWf7eVCC_s6TQFDENL7X3VG6JIYo,2231
|
|
56
56
|
westpa/core/binning/mab_driver.py,sha256=azSqc9pqHk_zc1ptGNjXARDbK-UAnPVmCiYwebi5mPY,2223
|
|
57
|
-
westpa/core/binning/_assign.cpython-311-darwin.so,sha256=
|
|
57
|
+
westpa/core/binning/_assign.cpython-311-darwin.so,sha256=W-tc8fTncvcN1YvVjb2h_KG3TZMJs_62csr19qJEijg,264480
|
|
58
58
|
westpa/core/binning/binless.py,sha256=Fb9TI5swQntzXjmlWFbYQ9yjzjLxDKNVVdmRxRqOnIY,4056
|
|
59
59
|
westpa/core/binning/__init__.py,sha256=XmjBP6fg_id_vDELkcWW3u2GeuL5OPWblvX-kc7mINk,1297
|
|
60
|
-
westpa/core/binning/mab_manager.py,sha256
|
|
60
|
+
westpa/core/binning/mab_manager.py,sha256=-bb9CdSXrx6XV8NWHa6Q1CTWVaGa4coAZn_lDlvHCkM,9815
|
|
61
61
|
westpa/core/binning/assign.py,sha256=e1YWyU3R12evLAoIWUrEvv3uvdKFo4u_mfKGDcK5AVU,18028
|
|
62
62
|
westpa/core/binning/binless_manager.py,sha256=XgsLaYhknzWA9IHCqOvmnLXSgM303KnKOUjLe1NM0Zw,9414
|
|
63
|
-
westpa/core/binning/mab.py,sha256=
|
|
63
|
+
westpa/core/binning/mab.py,sha256=X7L1jx--nNJTNA-PeJGDpwSa2PDMoMb4OtLpjffXQ4A,16046
|
|
64
64
|
westpa/core/binning/bins.py,sha256=WDj7DNX3MTVkRvkgAooa9G8VThxw32uIfMTuk9sS194,1460
|
|
65
65
|
westpa/core/reweight/matrix.py,sha256=219sRxkML1V9niPIndSoRvJAC0fUmpG0PLDKpmfWW-g,5509
|
|
66
66
|
westpa/core/reweight/__init__.py,sha256=8goYojsHMcJCZblBC2sc2fcj-NUNVEstbSLswKNlVfg,284
|
|
67
|
-
westpa/core/reweight/_reweight.cpython-311-darwin.so,sha256=
|
|
67
|
+
westpa/core/reweight/_reweight.cpython-311-darwin.so,sha256=vx_WN-ID46Bs1tyF4NZ5CWHliwM5tTdBI9jXZUL2wXU,303264
|
|
68
68
|
westpa/core/propagators/__init__.py,sha256=rx_kkeg3Tbb_rI0uhLGCD3OwSYj9QuhxF8QGN3mILrg,2373
|
|
69
|
-
westpa/core/propagators/executable.py,sha256=
|
|
69
|
+
westpa/core/propagators/executable.py,sha256=6YuNMZ7if4jGtZ2OV0k_7jmBvtHFfdaIX-LLQJ_KIc8,32201
|
|
70
70
|
westpa/analysis/__init__.py,sha256=CcmVPCB9OSEib0mJ4U-s9v3nrj4h-T_9AGApAbPnn8I,268
|
|
71
|
-
westpa/analysis/core.py,sha256=
|
|
71
|
+
westpa/analysis/core.py,sha256=rZ7xcrskpPwy2lrB27gXT4mSQRbqnPj9D8yA-Utve-M,22426
|
|
72
72
|
westpa/analysis/statistics.py,sha256=M3Gj1bOiAu_SA4upR7gENYEOP2gnIEaSOZeGyoIxAc8,789
|
|
73
73
|
westpa/analysis/trajectories.py,sha256=jyrbbKOVyZ3GjHQushDS_G8C4IRXlUmxa-WzmEEVGwc,12878
|
|
74
74
|
westpa/mclib/__init__.py,sha256=NskP81wKw-tHTniyJ8QbgKAHah5JdpCrnPKJo1T-nLw,11513
|
|
75
75
|
westpa/mclib/__main__.py,sha256=cKqfE9koMcrHkslEPpFISA4Eblwl0mllaxn7pFeyX1A,881
|
|
76
|
-
westpa/mclib/_mclib.cpython-311-darwin.so,sha256=
|
|
76
|
+
westpa/mclib/_mclib.cpython-311-darwin.so,sha256=2X97cU0ZN3L63HW27Ha2d1Jd8w2MKdRm1l9n8mTFtEw,246144
|
|
77
77
|
westpa/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
78
|
westpa/cli/tools/w_direct.py,sha256=5Z9eQpvpKM-40XdiI0L3t0O3jpjMx7tk8ndYAaJxvrc,22361
|
|
79
79
|
westpa/cli/tools/w_dumpsegs.py,sha256=uv0WxvKGauyW6VT3zGyALUXVqSXwDrhwbF3ZVSJV9Mo,3952
|
|
@@ -93,13 +93,13 @@ westpa/cli/tools/plothist.py,sha256=2jpAk_-T2XoWUExUyUNk0JOucPjQX51JxtntXRlQ54I,
|
|
|
93
93
|
westpa/cli/tools/w_kinetics.py,sha256=ALx8t9GGARfdMxgkPEqQzWoRVQkqJneM4EZF2ur_oPk,3542
|
|
94
94
|
westpa/cli/tools/w_fluxanl.py,sha256=a_swklwO2BGW4kwyJHz2RdKNyadfBQgV_wTTBcfS1XA,15564
|
|
95
95
|
westpa/cli/tools/w_reweight.py,sha256=McIhF9qeqUbJ8SFbskw6fn8OtJ9zFLaDQSqLm8xWarY,33410
|
|
96
|
-
westpa/cli/tools/w_pdist.py,sha256=
|
|
97
|
-
westpa/cli/tools/w_ipa.py,sha256=
|
|
96
|
+
westpa/cli/tools/w_pdist.py,sha256=I7yGHMvmU--jjuZNMSxtTSR_vLVhYvhJpjluzcjPGaQ,20821
|
|
97
|
+
westpa/cli/tools/w_ipa.py,sha256=4ToZGmZxw6PM635lVEVMTwI15VcKMSSy6b9CQHET3Rs,37482
|
|
98
98
|
westpa/cli/tools/w_bins.py,sha256=e9YMvQoQ5jjzBK8zlZgXNDCDhFGMMKgb2b-UdyI_qgQ,6801
|
|
99
99
|
westpa/cli/tools/w_stateprobs.py,sha256=fOaHZe7RYCNsIJmbXQqkdU6_cxqKcQLrKh2sxdaYvIQ,3872
|
|
100
100
|
westpa/cli/tools/w_postanalysis_reweight.py,sha256=lFjSuBWZ-25AKwA6_ee168BfINjbnVmxPDxYKJHFUkw,1808
|
|
101
101
|
westpa/cli/core/w_fork.py,sha256=UZVY6nUdMRRbKPfNFGAfEAu7tVhu7NewopPdQ0s8cz8,5693
|
|
102
|
-
westpa/cli/core/w_states.py,sha256=
|
|
102
|
+
westpa/cli/core/w_states.py,sha256=Fkr0WdUut59vPtj0_TZWAmY5_qf5H_WsoiusO7Slz50,9433
|
|
103
103
|
westpa/cli/core/w_run.py,sha256=9fLOJjCYQadB28gdsKwGxwjJtSB5u0DRITzAWmL3rJg,2159
|
|
104
104
|
westpa/cli/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
105
|
westpa/cli/core/w_truncate.py,sha256=-CHFOBr4NAZwGQ8-O5F7B0dPowpnFpm-mF9Us1gBgfo,1654
|
|
@@ -107,7 +107,7 @@ westpa/cli/core/w_init.py,sha256=V_CvlAuq8flg-zUO01sbMGYkLqrEDD4DU9sV90bYFus,879
|
|
|
107
107
|
westpa/cli/core/w_succ.py,sha256=ZK1MHHu7t53VdBrRgJUe7b1R8DnhMKPjHOqbbOjC_As,3074
|
|
108
108
|
westpa/trajtree/__init__.py,sha256=K64Ok5bUP-fXo1H2rigJqxCnm-U23tJlRngNOnzR3gs,96
|
|
109
109
|
westpa/trajtree/trajtree.py,sha256=sLf4kTi0QyvFdbSR__YcPwOR2wcOxtlkC4IPUFcq-9M,4497
|
|
110
|
-
westpa/trajtree/_trajtree.cpython-311-darwin.so,sha256=
|
|
110
|
+
westpa/trajtree/_trajtree.cpython-311-darwin.so,sha256=6gDd_uxe9JYOUfSpLCYCeQ3pkfXAahplN_lkRxEnfPg,131000
|
|
111
111
|
westpa/oldtools/files.py,sha256=JmLtZqxD88cybEHcOU6kodAeOJYxylpYFl4OQqU13Hs,944
|
|
112
112
|
westpa/oldtools/miscfn.py,sha256=595W28JazmiU9ioDgOKU9ZxtXJue_q-8WcpOKTgkikQ,909
|
|
113
113
|
westpa/oldtools/__init__.py,sha256=rxAxsQNQMADy5j8xrqW_7Vk3D9ajM7lfDjHaKQHRDTI,62
|
|
@@ -131,7 +131,7 @@ westpa/oldtools/stats/accumulator.py,sha256=AZ1RshALSHjdhfDXidE5_yHaDEsdDXfSzsmo
|
|
|
131
131
|
westpa/oldtools/stats/mcbs.py,sha256=yMgvdEu70j-h1_kTqYakypFV3s7AtWqJioWuy2bLUFI,3387
|
|
132
132
|
westpa/work_managers/__init__.py,sha256=nHbI9PmRosOeZ11gCHIwpv9qwgXbwUnGt9vIZ0nLtOg,1670
|
|
133
133
|
westpa/work_managers/core.py,sha256=NVe9XhcfizBzXjkymgeo0xLzNLP0tP6-VoTE0uxu91U,15061
|
|
134
|
-
westpa/work_managers/processes.py,sha256=
|
|
134
|
+
westpa/work_managers/processes.py,sha256=iZRaOW7DEuggDcb92D0goGAbLvYjkSwamdpADx2zooM,6960
|
|
135
135
|
westpa/work_managers/threads.py,sha256=-Xktf-LPqVRf7sMW7Yqdc_ayO_4x_f0zA9iZS_G-fuI,2335
|
|
136
136
|
westpa/work_managers/mpi.py,sha256=ArxswC1CMgBc5rZ1nr4cQQvwHlCWAcN-BkZt8ilhSgk,9511
|
|
137
137
|
westpa/work_managers/serial.py,sha256=fo5Sql5wO4PdFy2VbcssWy0G459MJwKjRWkklK6nDxo,694
|
|
@@ -141,10 +141,10 @@ westpa/work_managers/zeromq/__init__.py,sha256=rrl4YbEaZr2AiEBTMlhvEFH83dBlAwWR_
|
|
|
141
141
|
westpa/work_managers/zeromq/core.py,sha256=K3Iyrz5u2Dy-GgZFL3ZXDN2iaaLm7qL-A3cm4PdBiF8,22907
|
|
142
142
|
westpa/work_managers/zeromq/work_manager.py,sha256=UB_WvnejDRVi1ZU2QWpP9uzhnccOH7b3qHgU-wSstTY,22425
|
|
143
143
|
westpa/work_managers/zeromq/node.py,sha256=CeoJhXVqrZxrV3lMnDtm3LNkGFxjS4dr3E6wd7ZQRTE,4877
|
|
144
|
-
westpa-2022.
|
|
145
|
-
westpa-2022.
|
|
146
|
-
westpa-2022.
|
|
147
|
-
westpa-2022.
|
|
148
|
-
westpa-2022.
|
|
149
|
-
westpa-2022.
|
|
150
|
-
westpa-2022.
|
|
144
|
+
westpa-2022.10.dist-info/RECORD,,
|
|
145
|
+
westpa-2022.10.dist-info/LICENSE,sha256=I2wUldIRJmflTYUxmSiITSZEKvlovlMPrE3JU5IslkY,1074
|
|
146
|
+
westpa-2022.10.dist-info/AUTHORS,sha256=YMi91-Fs-vFgZKUaItfh20uXthT9oe2Kq6CQXmqMGqg,671
|
|
147
|
+
westpa-2022.10.dist-info/WHEEL,sha256=3Ij8bI-sb8yCMxXItr4MLlNoRGZb2WoUxQe9xIFR_DQ,111
|
|
148
|
+
westpa-2022.10.dist-info/entry_points.txt,sha256=0Ym8meKTdYbUEMtUHF_4zaZP__4ldfFnoYXyYlKRB6s,1428
|
|
149
|
+
westpa-2022.10.dist-info/top_level.txt,sha256=otaLnQtwo9jKCJmja4iOOsOVDThUvPfjJaeLrgGEhlE,7
|
|
150
|
+
westpa-2022.10.dist-info/METADATA,sha256=17fr3iDNghuqnwUeEVWPaoG_OF-pta25C9bYblf8UiU,7563
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|