Bundles¶
A Bundle
- A set-enhancement to add filtering and store handling capabilities
Bundles can be accessed like a normal set using iteration. You can add objects
using .add(item)
if the bundle is not a view
Examples¶
Some basic functions
bundle = Bundle(['10', '20', 1, 2, 3])
str_view = bundle.c(basestring) # only how strings
print list(str_view) # ['10', '20']
fnc_view = bundle.v(lambda x: int(x) < 3)
print list(fnc_view) # [1, 2]
Some File
specific functions
import adaptivemd as amd
bundle = Bundle([amd.File('0.dcd'), amd.File('a.pdb')])
file_view = bundle.f('*.dcd')
print list(file_view) # [File('0.dcd')]
Logic operations produce view on the resulting bundle
and_bundle = str_view & fnc_view
print list(and_bundle) # []
and_bundle = str_view | fnc_view
print list(and_bundle) # [1, 2, '10', '20']
A StoredBundle
is attached to a mongodb store (a stored object list).
Adding will append the object to the store if not stored yet. All iteration
and views will always be kept synced with the DB store content.
p = amd.Project('test-project')
store = StoredBundle() # new bundle
store.set_store(p.storage.trajectories) # attach to DB
print list(store) # show all trajectories
len_store = store.v(lambda x: len(x) > 10) # all trajs with len > 10
print list(len_store)
Set do not have ordering so some functions do not make sense. As long as
you are working with storable objects (subclassed from adaptivemd.mongodb.StorableMixin
)
you have some time-ordering (accurate to seconds)
print store.first # get the earlist created object
print store.one # get one (any) single object
print store.last # get the last created object
A bundle is mostly meant to work with storable objects (but does not have to)
To simplify access to certain attributes or apply function to all members you
can use the BaseBundle.all()
attribute and get a delegator that will
apply an attribute or method to all objects
print len_store.all.length # print all lengths of all objects in len_store
print store.all.path # print all path of all trajectories
# call `.execute('shutdown') on all workers in the `.workers` bundle
print p.workers.all.execute('shutdown')
Classes¶
Bundle ([iterable]) |
A container of objects |
StoredBundle () |
A stored bundle in a mongodb |
SortedBundle (bundle, key) |
Sorted view of a bundle |
ViewBundle (bundle, view) |
A view on a bundle where object are filtered by a bool function |
BaseBundle |
BaseClass for Bundle functionality a special set of storable objects |
LogicBundle (bundle1, bundle2) |
Implement simple and and or logic for bundles |
AndBundle (bundle1, bundle2) |
And logic |
OrBundle (bundle1, bundle2) |
Or logic |
BundleDelegator (bundle) |
Delegate an attribute call to all elements in a bundle |
FunctionDelegator (bundle, item) |
Delegate a function call to all elements in a bundle |