|
15 | 15 | from fedot.core.operations.factory import OperationFactory |
16 | 16 | from fedot.core.operations.operation import Operation |
17 | 17 | from fedot.core.operations.operation_parameters import OperationParameters |
| 18 | +from fedot.core.pipelines.pipeline_node_rules import ( |
| 19 | + merge_node_parameters, |
| 20 | + normalize_node_parameters, |
| 21 | + should_update_node_parameters, |
| 22 | +) |
18 | 23 | from fedot.core.repository.operation_types_repository import OperationTypesRepository |
19 | 24 | from fedot.core.utils import DEFAULT_PARAMS_STUB, NESTED_PARAMS_LABEL |
20 | 25 |
|
@@ -124,7 +129,7 @@ def update_params(self): |
124 | 129 | """Updates :attr:`custom_params` with changed parameters""" |
125 | 130 | new_params = self.fitted_operation.get_params() |
126 | 131 | changed_parameters = new_params.changed_parameters |
127 | | - updated_parameters = {**self.parameters, **changed_parameters} |
| 132 | + updated_parameters = merge_node_parameters(self.parameters, changed_parameters) |
128 | 133 | self.parameters = updated_parameters |
129 | 134 |
|
130 | 135 | @property |
@@ -218,9 +223,7 @@ def fit(self, |
218 | 223 | descriptive_id=self.descriptive_id) |
219 | 224 |
|
220 | 225 | # Update parameters after operation fitting (they can be corrected) |
221 | | - not_atomized_operation = 'atomized' not in self.operation.operation_type |
222 | | - |
223 | | - if not_atomized_operation and 'correct_params' in self.operation.metadata.tags: |
| 226 | + if should_update_node_parameters(self.operation.operation_type, self.operation.metadata.tags): |
224 | 227 | self.update_params() |
225 | 228 | return operation_predict |
226 | 229 |
|
@@ -357,15 +360,9 @@ def parameters(self, params: dict): |
357 | 360 | Args: |
358 | 361 | params: new parameters to be placed instead of existing |
359 | 362 | """ |
360 | | - if params is not None: |
361 | | - # The check for "default_params" is needed for backward compatibility. |
362 | | - if params == DEFAULT_PARAMS_STUB: |
363 | | - params = {} |
364 | | - # take nested params if they appeared (mostly used for tuning) |
365 | | - if NESTED_PARAMS_LABEL in params: |
366 | | - params = params[NESTED_PARAMS_LABEL] |
367 | | - self._parameters = OperationParameters.from_operation_type(self.operation.operation_type, **params) |
368 | | - self.content['params'] = self._parameters.to_dict() |
| 363 | + normalized_params = normalize_node_parameters(params, DEFAULT_PARAMS_STUB, NESTED_PARAMS_LABEL) |
| 364 | + self._parameters = OperationParameters.from_operation_type(self.operation.operation_type, **normalized_params) |
| 365 | + self.content['params'] = self._parameters.to_dict() |
369 | 366 |
|
370 | 367 | def __str__(self) -> str: |
371 | 368 | """Returns ``str`` representation of the node |
|
0 commit comments