Skip to content

Commit 5a92b4a

Browse files
committed
Merge remote-tracking branch 'upstream/master' into contrib-2
2 parents fcd71e3 + eadf81c commit 5a92b4a

24 files changed

+711
-412
lines changed

.github/workflows/ci_pipeline.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,10 @@ jobs:
188188
run: |
189189
pip install genbadge[all]
190190
genbadge coverage -i coverage.xml -o htmlcov/coverage-badge.svg
191-
191+
192+
- name: Upload coverage reports to Codecov
193+
uses: codecov/codecov-action@v3
194+
192195
# - name: Generate benchmark report
193196
# uses: pancetta/github-action-benchmark@v1
194197
# if: ${{ (!contains(github.event.head_commit.message, '[CI-no-benchmarks]')) && (github.event_name == 'push') }}

README.rst

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
|badge-ga|
22
|badge-ossf|
3+
|badge-cc|
4+
|zenodo|
35

46
Welcome to pySDC!
57
=================
@@ -88,7 +90,9 @@ This project also received funding from the `German Federal Ministry of Educatio
8890
The project also received help from the `Helmholtz Platform for Research Software Engineering - Preparatory Study (HiRSE_PS) <https://www.helmholtz-hirse.de/>`_.
8991

9092

91-
.. |badge-ga| image:: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml/badge.svg
93+
.. |badge-ga| image:: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml/badge.svg?branch=master
9294
:target: https://github.com/Parallel-in-Time/pySDC/actions/workflows/ci_pipeline.yml
9395
.. |badge-ossf| image:: https://bestpractices.coreinfrastructure.org/projects/6909/badge
94-
:target: https://bestpractices.coreinfrastructure.org/projects/6909
96+
:target: https://bestpractices.coreinfrastructure.org/projects/6909
97+
.. |badge-cc| image:: https://codecov.io/gh/Parallel-in-Time/pySDC/branch/master/graph/badge.svg?token=hpP18dmtgS
98+
:target: https://codecov.io/gh/Parallel-in-Time/pySDC

pySDC/core/Controller.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import sys
44
import numpy as np
55

6-
from pySDC.core import Hooks as hookclass
76
from pySDC.core.BaseTransfer import base_transfer
87
from pySDC.helpers.pysdc_helper import FrozenClass
98
from pySDC.implementations.convergence_controller_classes.check_convergence import CheckConvergence
9+
from pySDC.implementations.hooks.default_hook import DefaultHooks
1010

1111

1212
# short helper class to add params as attributes
@@ -41,10 +41,15 @@ def __init__(self, controller_params, description):
4141
"""
4242

4343
# check if we have a hook on this list. If not, use default class.
44-
controller_params['hook_class'] = controller_params.get('hook_class', hookclass.hooks)
45-
self.__hooks = controller_params['hook_class']()
44+
self.__hooks = []
45+
hook_classes = [DefaultHooks]
46+
user_hooks = controller_params.get('hook_class', [])
47+
hook_classes += user_hooks if type(user_hooks) == list else [user_hooks]
48+
[self.add_hook(hook) for hook in hook_classes]
49+
controller_params['hook_class'] = controller_params.get('hook_class', hook_classes)
4650

47-
self.hooks.pre_setup(step=None, level_number=None)
51+
for hook in self.hooks:
52+
hook.pre_setup(step=None, level_number=None)
4853

4954
self.params = _Pars(controller_params)
5055

@@ -101,6 +106,20 @@ def __setup_custom_logger(level=None, log_to_file=None, fname=None):
101106
else:
102107
pass
103108

109+
def add_hook(self, hook):
110+
"""
111+
Add a hook to the controller which will be called in addition to all other hooks whenever something happens.
112+
The hook is only added if a hook of the same class is not already present.
113+
114+
Args:
115+
hook (pySDC.Hook): A hook class that is derived from the core hook class
116+
117+
Returns:
118+
None
119+
"""
120+
if hook not in [type(me) for me in self.hooks]:
121+
self.__hooks += [hook()]
122+
104123
def welcome_message(self):
105124
out = (
106125
"Welcome to the one and only, really very astonishing and 87.3% bug free"
@@ -308,3 +327,15 @@ def get_convergence_controllers_as_table(self, description):
308327
out += f'\n{user_added}|{i:3} | {C.params.control_order:5} | {type(C).__name__}'
309328

310329
return out
330+
331+
def return_stats(self):
332+
"""
333+
Return the merged stats from all hooks
334+
335+
Returns:
336+
dict: Merged stats from all hooks
337+
"""
338+
stats = {}
339+
for hook in self.hooks:
340+
stats = {**stats, **hook.return_stats()}
341+
return stats

0 commit comments

Comments
 (0)