From 3f935e14ee1c15fe7d297f8d515abeb228ce2531 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:02:41 +0000 Subject: [PATCH] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/aiidalab_qe/app/submission/__init__.py | 14 +++--- src/aiidalab_qe/app/submission/basic/model.py | 47 ++++++++++--------- .../app/submission/basic/setting.py | 30 +++++++----- src/aiidalab_qe/app/submission/model.py | 16 ++----- src/aiidalab_qe/common/code/model.py | 6 ++- src/aiidalab_qe/plugins/bands/__init__.py | 2 +- src/aiidalab_qe/plugins/bands/code.py | 40 +++++++++------- src/aiidalab_qe/plugins/pdos/__init__.py | 2 +- src/aiidalab_qe/plugins/pdos/code.py | 22 ++++----- src/aiidalab_qe/plugins/xas/__init__.py | 2 +- src/aiidalab_qe/plugins/xas/code.py | 26 +++++----- 11 files changed, 106 insertions(+), 101 deletions(-) diff --git a/src/aiidalab_qe/app/submission/__init__.py b/src/aiidalab_qe/app/submission/__init__.py index 74a89ac9a..61d089c2f 100644 --- a/src/aiidalab_qe/app/submission/__init__.py +++ b/src/aiidalab_qe/app/submission/__init__.py @@ -10,6 +10,7 @@ from aiidalab_qe.app.parameters import DEFAULT_PARAMETERS from aiidalab_qe.app.utils import get_entry_items +from aiidalab_qe.common.code import CodeModel, PluginCodes, PwCodeModel from aiidalab_qe.common.panel import SettingsModel, SettingsPanel from aiidalab_qe.common.setup_codes import QESetupWidget from aiidalab_qe.common.setup_pseudos import PseudosInstallWidget @@ -19,9 +20,8 @@ ) from aiidalab_widgets_base import WizardAppWidgetStep -from aiidalab_qe.common.code import CodeModel, PluginCodes, PwCodeModel -from .model import SubmissionStepModel from .basic import BasicCodeModel, BasicCodeSettings +from .model import SubmissionStepModel DEFAULT: dict = DEFAULT_PARAMETERS # type: ignore @@ -99,7 +99,6 @@ def __init__(self, model: SubmissionStepModel, qe_auto_setup=True, **kwargs): } self._fetch_plugin_settings() - self._install_sssp(qe_auto_setup) self._set_up_qe(qe_auto_setup) @@ -107,7 +106,6 @@ def render(self): if self.rendered: return - self.process_label = ipw.Text( description="Label:", layout=ipw.Layout(width="auto", indent="0px"), @@ -210,7 +208,7 @@ def reset(self): @tl.observe("previous_step_state") def _on_previous_step_state_change(self, _): self._update_state() - + def _on_tab_change(self, change): if (tab_index := change["new"]) is None: return @@ -226,10 +224,10 @@ def _on_input_parameters_change(self, _): self._update_tabs() self._model.update_process_label() self._model.update_submission_blockers() - + def _on_plugin_submission_blockers_change(self, _): self._model.update_submission_blockers() - + def _on_plugin_submission_warning_messages_change(self, _): print("plugin submission warning messages change") self._model.update_submission_warnings() @@ -364,4 +362,4 @@ def toggle_plugin(change, identifier=identifier, model=model): self.settings[identifier] = panel( identifier=identifier, model=model, - ) \ No newline at end of file + ) diff --git a/src/aiidalab_qe/app/submission/basic/model.py b/src/aiidalab_qe/app/submission/basic/model.py index 40dc3c1fc..243a84f41 100644 --- a/src/aiidalab_qe/app/submission/basic/model.py +++ b/src/aiidalab_qe/app/submission/basic/model.py @@ -1,23 +1,25 @@ from __future__ import annotations +import os import traitlets as tl -import os from aiida import orm from aiidalab_qe.app.parameters import DEFAULT_PARAMETERS -from aiidalab_qe.common.panel import SettingsModel -from aiidalab_qe.common.code import CodeModel, PluginCodes, PwCodeModel +from aiidalab_qe.common.code import CodeModel, PwCodeModel from aiidalab_qe.common.mixins import HasInputStructure +from aiidalab_qe.common.panel import SettingsModel from aiidalab_qe.common.widgets import ( QEAppComputationalResourcesWidget, ) DEFAULT: dict = DEFAULT_PARAMETERS # type: ignore -class BasicCodeModel(SettingsModel, + +class BasicCodeModel( + SettingsModel, HasInputStructure, - ): +): """Model for the basic code setting.""" dependencies = [ @@ -28,14 +30,14 @@ class BasicCodeModel(SettingsModel, input_parameters = tl.Dict() codes = tl.Dict( - key_trait=tl.Unicode(), # code name - value_trait=tl.Instance(CodeModel), # code metadata - ) + key_trait=tl.Unicode(), # code name + value_trait=tl.Instance(CodeModel), # code metadata + ) # this is a copy of the codes trait, which is used to trigger the update of the plugin basic_codes = tl.Dict( - key_trait=tl.Unicode(), # code name - value_trait=tl.Instance(CodeModel), # code metadata - ) + key_trait=tl.Unicode(), # code name + value_trait=tl.Instance(CodeModel), # code metadata + ) plugin_mapping = tl.Dict( key_trait=tl.Unicode(), # plugin identifier @@ -94,15 +96,17 @@ def add_code(self, identifier: str, code: CodeModel) -> CodeModel | None: name = default_calc_job_plugin.split(".")[-1] if default_calc_job_plugin not in self.codes: if default_calc_job_plugin == "quantumespresso.pw": - code_model = PwCodeModel(name=name, - description=name, - default_calc_job_plugin=default_calc_job_plugin, - ) + code_model = PwCodeModel( + name=name, + description=name, + default_calc_job_plugin=default_calc_job_plugin, + ) else: - code_model = CodeModel(name=name, - description=name, - default_calc_job_plugin=default_calc_job_plugin, - ) + code_model = CodeModel( + name=name, + description=name, + default_calc_job_plugin=default_calc_job_plugin, + ) self.codes[default_calc_job_plugin] = code_model return code_model # update the plugin mapping to keep track of which codes are associated with which plugins @@ -110,7 +114,7 @@ def add_code(self, identifier: str, code: CodeModel) -> CodeModel | None: self.plugin_mapping[identifier] = [default_calc_job_plugin] else: self.plugin_mapping[identifier].append(default_calc_job_plugin) - + def get_code(self, name) -> CodeModel | None: if name in self.codes: # type: ignore return self.codes[name] # type: ignore @@ -140,7 +144,6 @@ def update_submission_blockers(self): self.submission_blockers = list(self._check_submission_blockers()) def _check_submission_blockers(self): - # No pw code selected (this is ignored while the setup process is running). pw_code = self._model.get_code("quantumespresso.pw") if pw_code and not pw_code.selected and not self.installing_qe: @@ -166,7 +169,6 @@ def _check_submission_blockers(self): yield ( f"Error: hi, plugin developer, please use the QEAppComputationalResourcesWidget from aiidalab_qe.common.widgets for code {name}." ) - def check_resources(self): pw_code = self.get_code("quantumespresso.pw") @@ -250,7 +252,6 @@ def check_resources(self): message=alert_message, ) ) - def _estimate_min_cpus( self, diff --git a/src/aiidalab_qe/app/submission/basic/setting.py b/src/aiidalab_qe/app/submission/basic/setting.py index 2d14414a2..564eb4621 100644 --- a/src/aiidalab_qe/app/submission/basic/setting.py +++ b/src/aiidalab_qe/app/submission/basic/setting.py @@ -6,19 +6,17 @@ from __future__ import annotations import ipywidgets as ipw -import traitlets as tl from aiidalab_qe.app.parameters import DEFAULT_PARAMETERS from aiidalab_qe.app.utils import get_entry_items -from aiidalab_qe.common.setup_codes import QESetupWidget -from aiidalab_qe.common.setup_pseudos import PseudosInstallWidget +from aiidalab_qe.common.code import CodeModel, PluginCodes, PwCodeModel +from aiidalab_qe.common.panel import SettingsPanel from aiidalab_qe.common.widgets import ( LoadingWidget, PwCodeResourceSetupWidget, QEAppComputationalResourcesWidget, ) -from aiidalab_qe.common.code import CodeModel, PluginCodes, PwCodeModel -from aiidalab_qe.common.panel import SettingsPanel + from .model import BasicCodeModel DEFAULT: dict = DEFAULT_PARAMETERS # type: ignore @@ -28,7 +26,6 @@ class BasicCodeSettings(SettingsPanel[BasicCodeModel]): title = "Basic" identifier = "basic" - def __init__(self, model: BasicCodeModel, **kwargs): super().__init__(model, **kwargs) self._set_up_codes() @@ -71,7 +68,7 @@ def reset(self): def _on_input_parameters_change(self, _): self._model.update_active_codes() - + def _on_input_structure_change(self, _): self._model.check_resources() @@ -80,7 +77,7 @@ def _on_code_activation_change(self, change): def _on_code_selection_change(self, _): """""" - #TODO: update the selected code in the input parameters + # TODO: update the selected code in the input parameters # self._model.update_submission_blockers() def _on_pw_code_resource_change(self, _): @@ -93,7 +90,6 @@ def _on_code_resource_change(self, _): self._model.basic_codes = self._model.get_model_state()["codes"] def _set_up_codes(self): - codes: PluginCodes = { "dft": { "pw": PwCodeModel( @@ -193,11 +189,23 @@ def _render_code_widget( ) code_model.observe( self._on_pw_code_resource_change, - ["num_cpus", "num_nodes", "ntasks_per_node", "cpus_per_task", "max_wallclock_seconds"], + [ + "num_cpus", + "num_nodes", + "ntasks_per_node", + "cpus_per_task", + "max_wallclock_seconds", + ], ) code_model.observe( self._on_code_resource_change, - ["num_cpus", "num_nodes", "ntasks_per_node", "cpus_per_task", "max_wallclock_seconds"], + [ + "num_cpus", + "num_nodes", + "ntasks_per_node", + "cpus_per_task", + "max_wallclock_seconds", + ], ) code_widgets = self.code_widgets_container.children[:-1] # type: ignore self.code_widgets_container.children = [*code_widgets, code_widget] diff --git a/src/aiidalab_qe/app/submission/model.py b/src/aiidalab_qe/app/submission/model.py index 684e87cd0..3970d95b9 100644 --- a/src/aiidalab_qe/app/submission/model.py +++ b/src/aiidalab_qe/app/submission/model.py @@ -1,7 +1,5 @@ from __future__ import annotations -import os -import typing as t from copy import deepcopy import ipywidgets as ipw @@ -14,11 +12,8 @@ from aiidalab_qe.common.mixins import Confirmable, HasInputStructure, HasModels from aiidalab_qe.common.mvc import Model from aiidalab_qe.common.panel import SettingsModel -from aiidalab_qe.common.widgets import QEAppComputationalResourcesWidget from aiidalab_qe.workflows import QeAppWorkChain -from aiidalab_qe.common.code import CodeModel, CodesDict - DEFAULT: dict = DEFAULT_PARAMETERS # type: ignore @@ -77,11 +72,10 @@ def confirm(self): # Once submitted, nothing should unconfirm the model! self.unobserve_all("confirmed") - def refresh_codes(self): for _, model in self.get_models(): model.refresh_codes() - + def update_active_models(self): for identifier, model in self.get_models(): if identifier in ["basic"]: @@ -124,7 +118,7 @@ def update_submission_blockers(self): if hasattr(model, "submission_blockers"): submission_blockers += model.submission_blockers self.internal_submission_blockers = submission_blockers - + def update_submission_warnings(self): submission_warning_messages = self._check_submission_warnings() for _, model in self.get_models(): @@ -176,13 +170,12 @@ def set_model_state(self, parameters): if parameters.get(identifier): model.set_model_state(parameters[identifier]) model.loaded_from_process = True - + if self.process_node: self.process_label = self.process_node.label self.process_description = self.process_node.description self.loaded_from_process = True - def get_selected_codes(self) -> dict[str, dict]: return { name: code_model.get_model_state() @@ -269,8 +262,7 @@ def _check_submission_blockers(self): # SSSP library not installed if not self.sssp_installed: yield "The SSSP library is not installed." - + def _check_submission_warnings(self): """Check for any warnings that should be displayed to the user.""" return "" - diff --git a/src/aiidalab_qe/common/code/model.py b/src/aiidalab_qe/common/code/model.py index 13f33ba39..ff026e9a9 100644 --- a/src/aiidalab_qe/common/code/model.py +++ b/src/aiidalab_qe/common/code/model.py @@ -4,7 +4,10 @@ from aiida import orm from aiida.common import NotExistent from aiidalab_qe.common.mvc import Model -from aiidalab_qe.common.widgets import QEAppComputationalResourcesWidget, PwCodeResourceSetupWidget +from aiidalab_qe.common.widgets import ( + PwCodeResourceSetupWidget, + QEAppComputationalResourcesWidget, +) class CodeModel(Model): @@ -122,7 +125,6 @@ class PwCodeModel(CodeModel): override = tl.Bool(False) npool = tl.Int(1) - def __init__( self, *, diff --git a/src/aiidalab_qe/plugins/bands/__init__.py b/src/aiidalab_qe/plugins/bands/__init__.py index 6759fe640..1275477a6 100644 --- a/src/aiidalab_qe/plugins/bands/__init__.py +++ b/src/aiidalab_qe/plugins/bands/__init__.py @@ -1,11 +1,11 @@ # from aiidalab_qe.bands.result import Result from aiidalab_qe.common.panel import SettingsOutline +from .code import BandsCodeModel, BandsCodeSettings from .model import BandsModel from .result import BandsResults, BandsResultsModel from .setting import BandsSettings from .workchain import workchain_and_builder -from .code import BandsCodeModel, BandsCodeSettings class BandsOutline(SettingsOutline): diff --git a/src/aiidalab_qe/plugins/bands/code.py b/src/aiidalab_qe/plugins/bands/code.py index b828f2837..a7735fe7a 100644 --- a/src/aiidalab_qe/plugins/bands/code.py +++ b/src/aiidalab_qe/plugins/bands/code.py @@ -1,14 +1,17 @@ """Panel for Bands plugin.""" import ipywidgets as ipw -from aiida import orm - -from aiidalab_qe.common.panel import SettingsPanel -from aiidalab_qe.common.panel import SettingsModel import traitlets as tl + +from aiida import orm from aiidalab_qe.common.code.model import CodeModel +from aiidalab_qe.common.panel import SettingsModel, SettingsPanel +from aiidalab_qe.common.widgets import ( + LoadingWidget, + PwCodeResourceSetupWidget, + QEAppComputationalResourcesWidget, +) -from aiidalab_qe.common.widgets import LoadingWidget, PwCodeResourceSetupWidget, QEAppComputationalResourcesWidget class BandsCodeModel(SettingsModel): """Model for the band structure plugin.""" @@ -31,8 +34,8 @@ class BandsCodeModel(SettingsModel): } basic_codes = tl.Dict( - key_trait=tl.Unicode(), # code name - value_trait=tl.Instance(CodeModel), # code metadata + key_trait=tl.Unicode(), # code name + value_trait=tl.Instance(CodeModel), # code metadata ) submission_blockers = tl.List(tl.Unicode()) submission_warning_messages = tl.Unicode("") @@ -47,11 +50,10 @@ def __init__(self, *args, **kwargs): # between session in separate threads. self._default_user_email = orm.User.collection.get_default().email - def refresh_codes(self): for _, code_model in self.codes.items(): code_model.update(self._default_user_email) # type: ignore - + def update_code_from_basic(self): # skip the sync if the user has overridden the settings print("override: ", self.override) @@ -64,9 +66,10 @@ def update_code_from_basic(self): code_model.set_model_state(code_data) def get_model_state(self): - return {"codes": self.codes, - "override": self.override, - } + return { + "codes": self.codes, + "override": self.override, + } def set_model_state(self, code_data: dict): for name, code_model in self.codes.items(): @@ -83,7 +86,6 @@ class BandsCodeSettings(SettingsPanel[BandsCodeModel]): title = "Bands Structure" identifier = "bands" - def __init__(self, model, **kwargs): super().__init__(model, **kwargs) @@ -118,7 +120,7 @@ def render(self): ipw.HBox([self.override, self.override_help]), self.code_widgets_container, ] - + self.rendered = True for code_model in self._model.codes.values(): @@ -127,7 +129,7 @@ def render(self): def _on_basic_codes_change(self, _): self._model.update_code_from_basic() - + def _on_override_change(self, change): if change["new"]: for code_widget in self.code_widgets.values(): @@ -158,7 +160,7 @@ def _toggle_code(self, code_model: CodeModel): # code_widget.layout.display = "block" if code_model.is_active else "none" if not code_model.is_rendered: self._render_code_widget(code_model, code_widget) - + def _render_code_widget( self, code_model: CodeModel, @@ -214,8 +216,10 @@ def _render_code_widget( # disable the code widget if the override is not set code_widget.num_nodes.disabled = not self.override.value code_widget.num_cpus.disabled = not self.override.value - code_widget.code_selection.code_select_dropdown.disabled = not self.override.value - + code_widget.code_selection.code_select_dropdown.disabled = ( + not self.override.value + ) + code_widgets = self.code_widgets_container.children[:-1] # type: ignore self.code_widgets_container.children = [*code_widgets, code_widget] diff --git a/src/aiidalab_qe/plugins/pdos/__init__.py b/src/aiidalab_qe/plugins/pdos/__init__.py index 4572ac9a7..1efbe8f84 100644 --- a/src/aiidalab_qe/plugins/pdos/__init__.py +++ b/src/aiidalab_qe/plugins/pdos/__init__.py @@ -1,10 +1,10 @@ from aiidalab_qe.common.panel import SettingsOutline +from .code import PdosCodeModel, PdosCodeSettings from .model import PdosModel from .result import PdosResults, PdosResultsModel from .setting import PdosSettings from .workchain import workchain_and_builder -from .code import PdosCodeModel, PdosCodeSettings class PdosOutline(SettingsOutline): diff --git a/src/aiidalab_qe/plugins/pdos/code.py b/src/aiidalab_qe/plugins/pdos/code.py index c999e192a..3dc010a6c 100644 --- a/src/aiidalab_qe/plugins/pdos/code.py +++ b/src/aiidalab_qe/plugins/pdos/code.py @@ -1,20 +1,22 @@ """Panel for pdos plugin.""" import ipywidgets as ipw -from aiida import orm - -from aiidalab_qe.common.panel import SettingsPanel -from aiidalab_qe.common.panel import SettingsModel import traitlets as tl + +from aiida import orm from aiidalab_qe.common.code.model import CodeModel +from aiidalab_qe.common.panel import SettingsModel, SettingsPanel +from aiidalab_qe.common.widgets import ( + LoadingWidget, + PwCodeResourceSetupWidget, + QEAppComputationalResourcesWidget, +) -from aiidalab_qe.common.widgets import LoadingWidget, PwCodeResourceSetupWidget, QEAppComputationalResourcesWidget class PdosCodeModel(SettingsModel): """Model for the pdos structure plugin.""" - dependencies = [ - ] + dependencies = [] codes = { "dos": CodeModel( @@ -40,7 +42,6 @@ def __init__(self, *args, **kwargs): # between session in separate threads. self._default_user_email = orm.User.collection.get_default().email - def refresh_codes(self): for _, code_model in self.codes.items(): code_model.update(self._default_user_email) # type: ignore @@ -71,13 +72,12 @@ def render(self): self.children = [ self.code_widgets_container, ] - + self.rendered = True for code_model in self._model.codes.values(): self._toggle_code(code_model) return self.code_widgets_container - def _toggle_code(self, code_model: CodeModel): if not self.rendered: @@ -97,7 +97,7 @@ def _toggle_code(self, code_model: CodeModel): # code_widget.layout.display = "block" if code_model.is_active else "none" if not code_model.is_rendered: self._render_code_widget(code_model, code_widget) - + def _render_code_widget( self, code_model: CodeModel, diff --git a/src/aiidalab_qe/plugins/xas/__init__.py b/src/aiidalab_qe/plugins/xas/__init__.py index bae747f9a..905ed8380 100644 --- a/src/aiidalab_qe/plugins/xas/__init__.py +++ b/src/aiidalab_qe/plugins/xas/__init__.py @@ -5,11 +5,11 @@ from aiidalab_qe.common.panel import SettingsOutline from aiidalab_qe.plugins import xas as xas_folder +from .code import XasCodeModel, XasCodeSettings from .model import XasModel from .result import XasResults, XasResultsModel from .setting import XasSettings from .workchain import workchain_and_builder -from .code import XasCodeModel, XasCodeSettings PSEUDO_TOC = yaml.safe_load(resources.read_text(xas_folder, "pseudo_toc.yaml")) diff --git a/src/aiidalab_qe/plugins/xas/code.py b/src/aiidalab_qe/plugins/xas/code.py index 1a57fc4f8..f4a130da0 100644 --- a/src/aiidalab_qe/plugins/xas/code.py +++ b/src/aiidalab_qe/plugins/xas/code.py @@ -1,20 +1,22 @@ """Panel for Xas plugin.""" import ipywidgets as ipw -from aiida import orm - -from aiidalab_qe.common.panel import SettingsPanel -from aiidalab_qe.common.panel import SettingsModel import traitlets as tl + +from aiida import orm from aiidalab_qe.common.code.model import CodeModel +from aiidalab_qe.common.panel import SettingsModel, SettingsPanel +from aiidalab_qe.common.widgets import ( + LoadingWidget, + PwCodeResourceSetupWidget, + QEAppComputationalResourcesWidget, +) -from aiidalab_qe.common.widgets import LoadingWidget, PwCodeResourceSetupWidget, QEAppComputationalResourcesWidget class XasCodeModel(SettingsModel): """Model for the xas structure plugin.""" - dependencies = [ - ] + dependencies = [] codes = { "xspectra": CodeModel( @@ -25,8 +27,8 @@ class XasCodeModel(SettingsModel): } basic_codes = tl.Dict( - key_trait=tl.Unicode(), # code name - value_trait=tl.Instance(CodeModel), # code metadata + key_trait=tl.Unicode(), # code name + value_trait=tl.Instance(CodeModel), # code metadata ) submission_blockers = tl.List(tl.Unicode()) submission_warning_messages = tl.Unicode("") @@ -40,7 +42,6 @@ def __init__(self, *args, **kwargs): # between session in separate threads. self._default_user_email = orm.User.collection.get_default().email - def refresh_codes(self): for _, code_model in self.codes.items(): code_model.update(self._default_user_email) # type: ignore @@ -71,13 +72,12 @@ def render(self): self.children = [ self.code_widgets_container, ] - + self.rendered = True for code_model in self._model.codes.values(): self._toggle_code(code_model) return self.code_widgets_container - def _toggle_code(self, code_model: CodeModel): if not self.rendered: @@ -97,7 +97,7 @@ def _toggle_code(self, code_model: CodeModel): # code_widget.layout.display = "block" if code_model.is_active else "none" if not code_model.is_rendered: self._render_code_widget(code_model, code_widget) - + def _render_code_widget( self, code_model: CodeModel,