Skip to content

Commit 35d64f5

Browse files
committed
add & use update_converters
1 parent 1e8b05c commit 35d64f5

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

specparam/convert/definitions.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
"""Define parameter converters."""
22

3+
from copy import deepcopy
4+
35
from specparam.convert.converter import AperiodicParamConverter, PeriodicParamConverter
46
from specparam.convert.params import compute_peak_height
57

@@ -11,6 +13,30 @@
1113
'periodic' : {'cf' : None, 'pw' : 'log_sub', 'bw' : 'full_width'},
1214
}
1315

16+
17+
def update_converters(defaults, updates):
18+
"""Update default converters.
19+
20+
Parameters
21+
----------
22+
defaults : dict
23+
Default converters.
24+
updates : dict
25+
Converter definitions to update.
26+
27+
Returns
28+
-------
29+
converters : dict
30+
Updated converters definition.
31+
"""
32+
33+
out = deepcopy(defaults)
34+
for component, converters in updates.items():
35+
for param, converter in converters.items():
36+
out[component][param] = converter
37+
38+
return out
39+
1440
###################################################################################################
1541
## APERIODIC PARAMETER CONVERTERS
1642

specparam/models/model.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from specparam.results.results import Results
1414

1515
from specparam.convert.convert import convert_aperiodic_params, convert_periodic_params
16-
from specparam.convert.definitions import DEFAULT_CONVERTERS
16+
from specparam.convert.definitions import update_converters, DEFAULT_CONVERTERS
1717

1818
from specparam.algorithms.spectral_fit import SpectralFitAlgorithm, SPECTRAL_FIT_SETTINGS_DEF
1919
from specparam.algorithms.definitions import ALGORITHMS, check_algorithm_definition
@@ -91,7 +91,8 @@ def __init__(self, aperiodic_mode='fixed', periodic_mode='gaussian',
9191
debug=False, verbose=True, **model_kwargs):
9292
"""Initialize model object."""
9393

94-
converters = DEFAULT_CONVERTERS if not converters else converters
94+
converters = DEFAULT_CONVERTERS if not converters else \
95+
update_converters(DEFAULT_CONVERTERS, converters)
9596
BaseModel.__init__(self, aperiodic_mode, periodic_mode, converters, verbose)
9697

9798
self.data = Data()

specparam/tests/convert/test_definitions.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,23 @@ def test_converters_library():
1818
assert converter.name == label
1919
assert callable(converter.function)
2020

21+
def test_update_converters():
22+
23+
converters1 = {'aperiodic' : {'exponent' : 'custom'}}
24+
out1 = update_converters(DEFAULT_CONVERTERS, converters1)
25+
assert out1['periodic'] == DEFAULT_CONVERTERS['periodic']
26+
assert out1['aperiodic']['exponent'] == converters1['aperiodic']['exponent']
27+
28+
converters2 = {'periodic' : {'cf' : 'custom'}}
29+
out2 = update_converters(DEFAULT_CONVERTERS, converters2)
30+
assert out2['aperiodic'] == DEFAULT_CONVERTERS['aperiodic']
31+
assert out2['periodic']['cf'] == converters2['periodic']['cf']
32+
33+
converters3 = {'aperiodic' : {'knee' : 'custom'}}
34+
out3 = update_converters(DEFAULT_CONVERTERS, converters3)
35+
assert out3['periodic'] == DEFAULT_CONVERTERS['periodic']
36+
assert out3['aperiodic']['knee'] == converters3['aperiodic']['knee']
37+
2138
def test_check_converters():
2239

2340
check_converters('aperiodic')

0 commit comments

Comments
 (0)