| from .builder import RUNNER_BUILDERS, RUNNERS |
|
|
|
|
| @RUNNER_BUILDERS.register_module() |
| class DefaultRunnerConstructor: |
| """Default constructor for runners. |
| |
| Custom existing `Runner` like `EpocBasedRunner` though `RunnerConstructor`. |
| For example, We can inject some new properties and functions for `Runner`. |
| |
| Example: |
| >>> from annotator.uniformer.mmcv.runner import RUNNER_BUILDERS, build_runner |
| >>> # Define a new RunnerReconstructor |
| >>> @RUNNER_BUILDERS.register_module() |
| >>> class MyRunnerConstructor: |
| ... def __init__(self, runner_cfg, default_args=None): |
| ... if not isinstance(runner_cfg, dict): |
| ... raise TypeError('runner_cfg should be a dict', |
| ... f'but got {type(runner_cfg)}') |
| ... self.runner_cfg = runner_cfg |
| ... self.default_args = default_args |
| ... |
| ... def __call__(self): |
| ... runner = RUNNERS.build(self.runner_cfg, |
| ... default_args=self.default_args) |
| ... # Add new properties for existing runner |
| ... runner.my_name = 'my_runner' |
| ... runner.my_function = lambda self: print(self.my_name) |
| ... ... |
| >>> # build your runner |
| >>> runner_cfg = dict(type='EpochBasedRunner', max_epochs=40, |
| ... constructor='MyRunnerConstructor') |
| >>> runner = build_runner(runner_cfg) |
| """ |
|
|
| def __init__(self, runner_cfg, default_args=None): |
| if not isinstance(runner_cfg, dict): |
| raise TypeError('runner_cfg should be a dict', |
| f'but got {type(runner_cfg)}') |
| self.runner_cfg = runner_cfg |
| self.default_args = default_args |
|
|
| def __call__(self): |
| return RUNNERS.build(self.runner_cfg, default_args=self.default_args) |
|
|