Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
bbe0f85
starting on the wizard rewrite
dwhswenson Jul 24, 2021
3cafb36
Merge branch 'main' into wizard-rewrite
dwhswenson Sep 27, 2021
f1df73f
Wizard rewrite for engines
dwhswenson Sep 30, 2021
ac15c65
clean up engines; rewrite cvs
dwhswenson Oct 2, 2021
3c45137
clean up CVs
dwhswenson Oct 2, 2021
4453c3a
Wizard works again!
dwhswenson Oct 6, 2021
c357976
passing tests for most of CVs and half volumes
dwhswenson Oct 6, 2021
1be9867
only 3 failing tests now
dwhswenson Oct 7, 2021
abdbead
fix most tests
dwhswenson Oct 7, 2021
59b5770
tests pass locally
dwhswenson Oct 7, 2021
1bf6a89
Add missing files; make more args kwarg-only
dwhswenson Oct 7, 2021
37323f3
Merge branch 'main' of github.com:openpathsampling/openpathsampling-c…
dwhswenson Oct 8, 2021
366dc73
Merge branch 'main' of github.com:openpathsampling/openpathsampling-c…
dwhswenson Oct 8, 2021
425f925
tests for wizard/helper.py
dwhswenson Oct 9, 2021
3660805
some tests & docstrings
dwhswenson Oct 21, 2021
bba408f
Rename plugins => plugin_registration
dwhswenson Oct 21, 2021
6cfc536
Start plugin_classes with LoadFromOPS
dwhswenson Oct 21, 2021
47c744a
move wizard object plugins into plugin_classes
dwhswenson Oct 21, 2021
36c887d
move WrapCategory to plugin_classes
dwhswenson Oct 22, 2021
f02a367
tests for wizard.parameters,standard_categories
dwhswenson Oct 22, 2021
7e6b55e
add test_parameters.py
dwhswenson Oct 22, 2021
0bc8270
unittest.mock
dwhswenson Oct 22, 2021
8290154
tests for plugin_registration
dwhswenson Oct 22, 2021
bf38703
refactor get_text_from_context
dwhswenson Oct 23, 2021
0d706e6
start to tests for plugin_classes
dwhswenson Oct 23, 2021
0f0e0e0
Tests for object plugin classes
dwhswenson Oct 25, 2021
0a7b981
tests for WrapCategory
dwhswenson Oct 25, 2021
64572a7
finish plugin classes tests
dwhswenson Oct 25, 2021
93e5f9e
missing wizard tests
dwhswenson Oct 25, 2021
934040a
looks like all tests pass with full coverage
dwhswenson Oct 25, 2021
a88a677
some docstrings
dwhswenson Oct 26, 2021
b898478
docstrings
dwhswenson Oct 26, 2021
f8d0db4
add EvalHelperFunc, help for CVs, lambda_min/max
dwhswenson Oct 26, 2021
d7ec33d
fix use of LoadFromOPSFile
dwhswenson Oct 26, 2021
448088e
tests for EvalHelperFunc
dwhswenson Oct 26, 2021
7649c93
Apply suggestions from code review
dwhswenson Oct 27, 2021
9129def
import mock_wizard from mock_wizard
dwhswenson Oct 27, 2021
1474c8d
add debug logging to plugin registration
dwhswenson Oct 27, 2021
da5acdc
Error on duplicate WizardObjectPlugins
dwhswenson Oct 27, 2021
3696d69
Fix lack of context in negated volume
dwhswenson Oct 27, 2021
20aba5a
Apply suggestions from code review
dwhswenson Oct 28, 2021
750bb55
Update the negated volume intro text
dwhswenson Oct 28, 2021
1399860
Merge branch 'wizard-rewrite' of github.com:dwhswenson/openpathsampli…
dwhswenson Oct 28, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Rename plugins => plugin_registration
Also simplify running modules with `python -m`
  • Loading branch information
dwhswenson committed Oct 21, 2021
commit bba408f7a256ebfa0f1ff1e1a3814335043e22de
2 changes: 1 addition & 1 deletion paths_cli/commands/wizard.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import click
from paths_cli.wizard.plugins import register_installed_plugins
from paths_cli.wizard.plugin_registration import register_installed_plugins
from paths_cli.wizard.two_state_tps import TWO_STATE_TPS_WIZARD
from paths_cli import OPSCommandPlugin

Expand Down
15 changes: 2 additions & 13 deletions paths_cli/wizard/cvs.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,16 +200,5 @@ def coordinate(wizard, prereqs=None):
)

if __name__ == "__main__": # no-cov
from paths_cli.wizard.wizard import Wizard
from paths_cli.wizard.plugins import register_installed_plugins
register_installed_plugins()
plugins = [obj for obj in globals().values()
if isinstance(obj, WizardObjectPlugin)]
from_file = [obj for obj in globals().values()
if isinstance(obj, LoadFromOPS)]
for plugin in plugins + from_file:
CV_PLUGIN.register_plugin(plugin)

wiz = Wizard({})
cv = CV_PLUGIN(wiz)
print(cv)
from paths_cli.wizard.run_module import run_category
run_category('cv')
12 changes: 3 additions & 9 deletions paths_cli/wizard/engines.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,7 @@

ENGINE_FROM_FILE = LoadFromOPS('engine')

if __name__ == "__main__":
from paths_cli.wizard import wizard
from paths_cli.wizard.plugins import register_installed_plugins
from paths_cli.wizard.plugins import get_category_wizard
register_installed_plugins()
engines = get_category_wizard('engine')
wiz = wizard.Wizard([])
engine = engines(wiz)
print(engine)
if __name__ == "__main__": # no-cov
from paths_cli.wizard.run_module import run_category
run_category('engine')

3 changes: 2 additions & 1 deletion paths_cli/wizard/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ def from_proxy(cls, proxy, compiler_plugin):
dct = proxy._asdict()
loader = loader_dict[proxy.name]
if isinstance(loader, _CategoryCompilerProxy):
from paths_cli.wizard.plugins import get_category_wizard
# TODO: can this import now be moved to top of file?
from paths_cli.wizard.plugin_registration import get_category_wizard
category = loader.category
dct['loader'] = get_category_wizard(category)
dct['ask'] = get_category_info(category).singular
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from paths_cli.utils import get_installed_plugins
from paths_cli.plugin_management import NamespacePluginLoader


class CategoryWizardPluginRegistrationError(Exception):
pass

Expand Down
23 changes: 23 additions & 0 deletions paths_cli/wizard/run_module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from paths_cli.wizard.plugin_registration import register_installed_plugins
from paths_cli.wizard.wizard import Wizard
from paths_cli.wizard.plugin_registration import get_category_wizard

from paths_cli.wizard.parameters import WizardObjectPlugin
from paths_cli.wizard.load_from_ops import LoadFromOPS

# TODO: for now we ignore this for coverage -- it's mainly used for UX
# testing by allowing each module to be run with, e.g.:
# python -m paths_cli.wizard.engines
# If that functionality is retained, it might be good to find a way to test
# this.
def run_category(category, requirements=None): # -no-cov-
# TODO: if we keep this, fix it up so that it also saves the resulting
# objects
register_installed_plugins()
if requirements is None:
requirements = {}
wiz = Wizard({})
wiz.requirements = requirements
category_plugin = get_category_wizard(category)
obj = category_plugin(wiz)
print(obj)
2 changes: 1 addition & 1 deletion paths_cli/wizard/shooting.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from paths_cli.wizard.core import get_missing_object
# from paths_cli.wizard.engines import engines
Comment thread
dwhswenson marked this conversation as resolved.
Outdated
from paths_cli.wizard.plugins import get_category_wizard
from paths_cli.wizard.plugin_registration import get_category_wizard
from paths_cli.compiling.tools import custom_eval

engines = get_category_wizard('engine')
Expand Down
3 changes: 1 addition & 2 deletions paths_cli/wizard/steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@

# from paths_cli.wizard.cvs import cvs
# from paths_cli.wizard.engines import engines
from paths_cli.wizard.plugins import get_category_wizard
from paths_cli.wizard.plugin_registration import get_category_wizard
from paths_cli.wizard.tps import tps_scheme

from paths_cli.wizard.plugins import get_category_wizard
volumes = get_category_wizard('volume')

WizardStep = namedtuple('WizardStep', ['func', 'display_name', 'store_name',
Expand Down
2 changes: 1 addition & 1 deletion paths_cli/wizard/tps.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from paths_cli.wizard.core import get_missing_object
from paths_cli.wizard.shooting import shooting
from paths_cli.wizard.volumes import VOLUMES_PLUGIN as volumes
Comment thread
dwhswenson marked this conversation as resolved.
Outdated
from paths_cli.wizard.plugins import get_category_wizard
from paths_cli.wizard.plugin_registration import get_category_wizard

from functools import partial
volumes = get_category_wizard('volume')
Expand Down
2 changes: 1 addition & 1 deletion paths_cli/wizard/two_state_tps.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from paths_cli.wizard.plugins import get_category_wizard
from paths_cli.wizard.plugin_registration import get_category_wizard
from paths_cli.wizard.tps import tps_scheme
from paths_cli.wizard.steps import (
SINGLE_ENGINE_STEP, CVS_STEP, WizardStep
Expand Down
17 changes: 3 additions & 14 deletions paths_cli/wizard/volumes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
ProxyParameter, WizardParameterObjectPlugin, WizardObjectPlugin
)
from paths_cli.wizard.load_from_ops import LoadFromOPS
from paths_cli.wizard.plugins import get_category_wizard
from paths_cli.wizard.plugin_registration import get_category_wizard
Comment thread
dwhswenson marked this conversation as resolved.
Outdated
from paths_cli.wizard.wrap_compilers import WrapCategory
from paths_cli.wizard.core import interpret_req
import paths_cli.compiling.volumes
Expand Down Expand Up @@ -121,17 +121,6 @@ def volume_ask(wizard, context):
helper="No volume help yet"
)


if __name__ == "__main__": # no-cov
from paths_cli.wizard.wizard import Wizard
from paths_cli.wizard.plugins import register_installed_plugins
register_installed_plugins()
plugins = [obj for obj in globals().values()
if isinstance(obj, WizardObjectPlugin)]
from_file = [obj for obj in globals().values()
if isinstance(obj, LoadFromOPS)]
for plugin in plugins + from_file:
VOLUMES_PLUGIN.register_plugin(plugin)
wiz = Wizard([])
wiz.requirements['state'] = ('volumes', 1, 1)
VOLUMES_PLUGIN(wiz)
from paths_cli.wizard.run_module import run_category
run_category('volume', {'state': ('volumes', 1, 1)})
3 changes: 0 additions & 3 deletions paths_cli/wizard/wizard.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,3 @@ def run_wizard(self):
# TWO_STATE_TIS_WIZARD
# MULTIPLE_STATE_TIS_WIZARD
# MULTIPLE_INTERFACE_SET_TIS_WIZARD

if __name__ == "__main__":
FLEX_LENGTH_TPS_WIZARD.run_wizard()
62 changes: 31 additions & 31 deletions paths_cli/wizard/wrap_compilers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,37 @@
from .helper import Helper
from paths_cli.plugin_management import OPSPlugin

class WrapCompilerWizardPlugin:
def __init__(self, name, category, parameters, compiler_plugin,
prerequisite=None, intro=None, description=None):
self.name = name
self.parameters = parameters
self.compiler_plugin = compiler_plugin
self.prerequisite = prerequisite
self.intro = intro
self.description = description
loaders = {p.name: p.loader for p in self.compiler_plugin.parameters}
for param in self.parameters:
param.register_loader(loaders[param.name])

def _builder(self, wizard, prereqs):
dct = dict(prereqs) # make a copy
dct.update({param.name: param(wizard) for param in self.parameters})
result = self.compiler_plugin(**dct)
return result

def __call__(self, wizard):
if self.intro is not None:
wizard.say(self.intro)

if self.prerequisite is not None:
prereqs = self.prerequisite(wizard)
else:
prereqs = {}

result = self._builder(wizard, prereqs)

return result
# class WrapCompilerWizardPlugin:
# def __init__(self, name, category, parameters, compiler_plugin,
# prerequisite=None, intro=None, description=None):
# self.name = name
# self.parameters = parameters
# self.compiler_plugin = compiler_plugin
# self.prerequisite = prerequisite
# self.intro = intro
# self.description = description
# loaders = {p.name: p.loader for p in self.compiler_plugin.parameters}
# for param in self.parameters:
# param.register_loader(loaders[param.name])

# def _builder(self, wizard, prereqs):
# dct = dict(prereqs) # make a copy
# dct.update({param.name: param(wizard) for param in self.parameters})
# result = self.compiler_plugin(**dct)
# return result

# def __call__(self, wizard):
# if self.intro is not None:
# wizard.say(self.intro)

# if self.prerequisite is not None:
# prereqs = self.prerequisite(wizard)
# else:
# prereqs = {}

# result = self._builder(wizard, prereqs)

# return result

class CategoryHelpFunc:
def __init__(self, category, basic_help=None):
Expand Down