Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions specparam/algorithms/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
"""Algorithms sub-module."""

from .algorithm import Algorithm

# Link in report function to list available algorithms
from specparam.reports.options import check_algorithms
31 changes: 15 additions & 16 deletions specparam/algorithms/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import numpy as np

from specparam.data.data import DATA_FORMATS
from specparam.utils.checks import check_input_options
from specparam.algorithms.settings import SettingsDefinition, SettingsValues
from specparam.modutils.docs import docs_get_section, replace_docstring_sections
Expand All @@ -10,17 +11,18 @@
###################################################################################################
###################################################################################################

DATA_FORMATS = ['spectrum', 'spectra', 'spectrogram', 'spectrograms']

class Algorithm():
"""Template object for defining a fit algorithm.

Parameters
Attributes
----------
name : str
Name of the fitting algorithm.
description : str
Description of the fitting algorithm.

Parameters
----------
public_settings : SettingsDefinition or dict
Name and description of public settings for the fitting algorithm.
private_settings : SettingsDefinition or dict, optional
Expand All @@ -39,13 +41,12 @@ class Algorithm():
Whether to run in debug state, raising an error if encountered during fitting.
"""

def __init__(self, name, description, public_settings, private_settings=None,
data_format='spectrum', modes=None, data=None, results=None, model=None,
debug=False):
"""Initialize Algorithm object."""
name = None
description = None

self.name = name
self.description = description
def __init__(self, public_settings, private_settings=None, data_format='spectrum',
modes=None, data=None, results=None, model=None, debug=False):
"""Initialize Algorithm object."""

if not isinstance(public_settings, SettingsDefinition):
public_settings = SettingsDefinition(public_settings)
Expand Down Expand Up @@ -182,15 +183,13 @@ class AlgorithmCF(Algorithm):
% copied in from Algorithm
"""

def __init__(self, name, description, public_settings, private_settings=None,
data_format='spectrum', modes=None, data=None, results=None,
model=None, debug=False):
def __init__(self, public_settings, private_settings=None, data_format='spectrum',
modes=None, data=None, results=None, model=None, debug=False):
"""Initialize Algorithm object."""

Algorithm.__init__(self, name=name, description=description,
public_settings=public_settings, private_settings=private_settings,
data_format=data_format, modes=modes, data=data, results=results,
model=model, debug=debug)
Algorithm.__init__(self, public_settings, private_settings=private_settings,
data_format=data_format, modes=modes, data=data,
results=results, model=model, debug=debug)

self._cf_settings_desc = CURVE_FIT_SETTINGS
self._cf_settings = SettingsValues(self._cf_settings_desc.names)
Expand Down
10 changes: 0 additions & 10 deletions specparam/algorithms/definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,4 @@
'spectral_fit' : SpectralFitAlgorithm,
}


def check_algorithms():
"""Check the set of available fit algorithms."""

print('Available algorithms:')
for algorithm in ALGORITHMS.values():
algorithm = algorithm()
print(' {:12s} : {:s}'.format(algorithm.name, algorithm.description))


check_algorithm_definition = partial(check_selection, definition=Algorithm)
5 changes: 3 additions & 2 deletions specparam/algorithms/spectral_fit.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class SpectralFitAlgorithm(AlgorithmCF):
"""
# pylint: disable=attribute-defined-outside-init

name = 'spectral_fit'
description = 'Original parameterizing neural power spectra algorithm.'

def __init__(self, peak_width_limits=(0.5, 12.0), max_n_peaks=np.inf, min_peak_height=0.0,
peak_threshold=2.0, ap_percentile_thresh=0.025, ap_guess=None, ap_bounds=None,
cf_bound=1.5, bw_std_edge=1.0, gauss_overlap_thresh=0.75, maxfev=5000,
Expand All @@ -111,8 +114,6 @@ def __init__(self, peak_width_limits=(0.5, 12.0), max_n_peaks=np.inf, min_peak_h

# Initialize base algorithm object with algorithm metadata
super().__init__(
name='spectral_fit',
description='Original parameterizing neural power spectra algorithm.',
public_settings=SPECTRAL_FIT_SETTINGS_DEF,
private_settings=SPECTRAL_FIT_PRIVATE_SETTINGS_DEF,
modes=modes, data=data, results=results, model=model, debug=debug)
Expand Down
11 changes: 6 additions & 5 deletions specparam/data/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@
###################################################################################################

# Define set of data fields
DATA_FIELDS = ['power_spectrum', 'freq_range', 'freq_res']
META_DATA_FIELDS = ['freq_range', 'freq_res']
FORMATS = ['power']
DATA_FORMATS = ['spectrum', 'spectra', 'spectrogram', 'spectrograms']
DATA_FIELDS = ['power_spectrum', 'freq_range', 'freq_res']
DATA_UNITS = ['power']


class Data():
Expand Down Expand Up @@ -58,7 +59,7 @@ class Data():
All power values are stored internally in log10 scale.
"""

def __init__(self, check_freqs=True, check_data=True, format='power', model=None):
def __init__(self, check_freqs=True, check_data=True, units='power', model=None):
"""Initialize Data object."""

self._reset_data(True, True)
Expand All @@ -70,8 +71,8 @@ def __init__(self, check_freqs=True, check_data=True, format='power', model=None
'data' : check_data,
}

check_input_options(format, FORMATS, 'format')
self.format = format
check_input_options(units, DATA_UNITS, 'units')
self.units = units

self._model = model

Expand Down
4 changes: 3 additions & 1 deletion specparam/metrics/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
"""Metrics sub-module."""

from .metric import Metric
from .check import check_metrics

# Link in report function to list available metrics
from specparam.reports.options import check_metrics
29 changes: 0 additions & 29 deletions specparam/metrics/check.py

This file was deleted.

5 changes: 4 additions & 1 deletion specparam/modes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
"""Functionality related to definining fit modes."""

from .mode import Mode
from .check import check_modes
from .paramdef import ParamDefinition

# Link in report function to list available modes
from specparam.reports.options import check_modes

35 changes: 0 additions & 35 deletions specparam/modes/check.py

This file was deleted.

6 changes: 6 additions & 0 deletions specparam/params/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
"""Sub-module for functionality related to parameters and parameter conversions."""

from .converter import AperiodicParamConverter, PeriodicParamConverter

# Link in report function to list available parameter converters
from specparam.reports.options import check_converters

Empty file added specparam/params/check.py
Empty file.
16 changes: 0 additions & 16 deletions specparam/params/definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,19 +176,3 @@ def get_converter(component, parameter, converter):
converter = NULL_CONVERTERS[component]

return converter


def check_converters(component):
"""Check the set of parameter converters that are available.

Parameters
----------
component : {'aperiodic', 'periodic'}
Which component to check available parameter converters for.
"""

print('Available {:s} converters:'.format(component))
for param, convs in CONVERTERS[component].items():
print(param)
for label, converter in convs.items():
print(' {:10s} {:s}'.format(converter.name, converter.description))
100 changes: 100 additions & 0 deletions specparam/reports/options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
"""Utilities to report on available options for fitting, modes, evaluations, etc."""

from specparam.modes.mode import VALID_COMPONENTS
from specparam.reports.strings import gen_mode_str_lst, gen_mode_params_str_lst, gen_metric_str_lst
from specparam.reports.strings import _format

###################################################################################################
###################################################################################################

def check_algorithms(concise=False):
"""Check the set of available fit algorithms."""

from specparam.algorithms.definitions import ALGORITHMS

str_lst = []
str_lst.extend(['AVAILABLE ALGORITHMS', ''])

for algorithm in ALGORITHMS.values():
str_lst.append('{:s} : {:s}'.format(algorithm.name, algorithm.description))

print(_format(str_lst, concise))


def check_metrics(category='all', concise=False):
"""Check the set of available metrics.

Parameters
----------
category : {'all', 'error', 'gof'}
Which category of metrics to check.
"""

from specparam.metrics.definitions import METRICS

categories = list(METRICS.keys()) if category == 'all' else [category]

str_lst = []
for category in categories:

str_lst.extend(['AVAILABLE {} METRICS'.format(category.upper()), ''])

for metric in METRICS[category].values():
str_lst.extend(gen_metric_str_lst(metric, True))

print(_format(str_lst, concise))


def check_modes(component='all', check_params=False, concise=False):
"""Check the set of modes that are available.

Parameters
----------
component : {'all', 'aperiodic', 'periodic'}
Which component to check available modes for.
check_params : bool, optional, default: False
Whether to print out information on the parameters of each mode.
"""

from specparam.modes.definitions import MODES

components = VALID_COMPONENTS if component == 'all' else [component]

str_lst = []
for component in components:

str_lst.extend(['AVAILABLE {} MODES'.format(component.upper()), ''])

for mode in MODES[component].values():
str_lst.extend(gen_mode_str_lst(mode, True, label_component=False))
if check_params:
str_lst.extend(gen_mode_params_str_lst(mode))
str_lst.append('')

print(_format(str_lst, concise))


def check_converters(component='all', concise=False):
"""Check the set of parameter converters that are available.

Parameters
----------
component : {'all', 'aperiodic', 'periodic'}
Which component to check available parameter converters for.
"""

from specparam.params.definitions import CONVERTERS

components = VALID_COMPONENTS if component == 'all' else [component]

str_lst = []
for component in components:

str_lst.extend(['AVAILABLE {} PARAMETER CONVERTERS'.format(component.upper()), ''])

for param, convs in CONVERTERS[component].items():
str_lst.append("'" + param + "'")
for label, converter in convs.items():
str_lst.append('{:s}: {:s}'.format(converter.name, converter.description))

print(_format(str_lst, concise))
4 changes: 2 additions & 2 deletions specparam/reports/strings.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,11 +347,11 @@ def gen_settings_str(algorithm, description=False, concise=False):
# Create output string - header
str_lst = [
'ALGORITHM',
algorithm.name,
algorithm.name if algorithm.name else 'undefined',
]

if description:
str_lst.append(algorithm.description)
str_lst.append(algorithm.description if algorithm.description else 'no description')

str_lst.extend([
'',
Expand Down
Loading
Loading