diff --git a/src/ria_toolkit_oss/annotations/__init__.py b/src/ria_toolkit_oss/annotations/__init__.py index ebb3d10..1542dcf 100644 --- a/src/ria_toolkit_oss/annotations/__init__.py +++ b/src/ria_toolkit_oss/annotations/__init__.py @@ -1,4 +1,3 @@ - """ The annotations package contains tools and utilities for creating, managing, and processing annotations. diff --git a/src/ria_toolkit_oss/annotations/threshold_qualifier.py b/src/ria_toolkit_oss/annotations/threshold_qualifier.py index 338f13c..1d23ef6 100644 --- a/src/ria_toolkit_oss/annotations/threshold_qualifier.py +++ b/src/ria_toolkit_oss/annotations/threshold_qualifier.py @@ -167,7 +167,10 @@ def _estimate_spectral_bounds(signal_segment: np.ndarray, sample_rate: float) -> else: runs = _find_ranges(sig_indices, max_gap=max(1, spectral_smooth_bins // 2)) peak_idx = int(np.argmax(smoothed_fft)) - lo_idx, hi_idx = min(runs, key=lambda run: 0 if run[0] <= peak_idx <= run[1] else min(abs(run[0] - peak_idx), abs(run[1] - peak_idx))) + lo_idx, hi_idx = min( + runs, + key=lambda run: 0 if run[0] <= peak_idx <= run[1] else min(abs(run[0] - peak_idx), abs(run[1] - peak_idx)), + ) # Prevent extremely narrow tone boxes from collapsing to just a few bins. min_total_bw_hz = 20_000.0 diff --git a/src/ria_toolkit_oss/datatypes/datasets/radio_dataset.py b/src/ria_toolkit_oss/datatypes/datasets/radio_dataset.py index cf3fd23..7a70589 100644 --- a/src/ria_toolkit_oss/datatypes/datasets/radio_dataset.py +++ b/src/ria_toolkit_oss/datatypes/datasets/radio_dataset.py @@ -956,8 +956,10 @@ def get_result_sizes( # noqa: C901 # TODO: Simplify function # Check that each class that will be augmented does not already suffice target_size for cls_name, target_size_value in zip(classes_to_augment, target_size): if class_sizes[cls_name] >= target_size_value: - raise ValueError(f"""target_size of {target_size_value} is already sufficed for current size of - {class_sizes[cls_name]} for class: {cls_name}""") + raise ValueError( + f"""target_size of {target_size_value} is already sufficed for current size of + {class_sizes[cls_name]} for class: {cls_name}""" + ) for index, class_name in enumerate(classes_to_augment): result_sizes[class_name] = target_size[index] diff --git a/src/ria_toolkit_oss/io/recording.py b/src/ria_toolkit_oss/io/recording.py index 0234e11..f56012f 100644 --- a/src/ria_toolkit_oss/io/recording.py +++ b/src/ria_toolkit_oss/io/recording.py @@ -136,9 +136,9 @@ def from_npy(file: os.PathLike | str, legacy: bool = False) -> Recording: annotations = [] except ModuleNotFoundError: # File was pickled with utils.data.Annotation — remap to ria_toolkit_oss - import pickle import sys import types + import ria_toolkit_oss.datatypes.annotation as _ann_mod utils_shim = types.ModuleType("utils") diff --git a/src/ria_toolkit_oss/sdr/blade.py b/src/ria_toolkit_oss/sdr/blade.py index 576a91c..c8e6f3f 100644 --- a/src/ria_toolkit_oss/sdr/blade.py +++ b/src/ria_toolkit_oss/sdr/blade.py @@ -474,8 +474,10 @@ class Blade(SDR): if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This sets \ - the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This sets \ + the gain relative to the maximum possible gain." + ) else: abs_gain = rx_gain_max + gain else: @@ -548,8 +550,10 @@ class Blade(SDR): if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This sets\ - the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This sets\ + the gain relative to the maximum possible gain." + ) else: abs_gain = tx_gain_max + gain else: diff --git a/src/ria_toolkit_oss/sdr/hackrf.py b/src/ria_toolkit_oss/sdr/hackrf.py index 79e00a7..06b49a7 100644 --- a/src/ria_toolkit_oss/sdr/hackrf.py +++ b/src/ria_toolkit_oss/sdr/hackrf.py @@ -172,8 +172,10 @@ class HackRF(SDR): tx_gain_max = 47 if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This \ - sets the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This \ + sets the gain relative to the maximum possible gain." + ) else: abs_gain = tx_gain_max + gain else: diff --git a/src/ria_toolkit_oss/sdr/pluto.py b/src/ria_toolkit_oss/sdr/pluto.py index 701198a..47af8df 100644 --- a/src/ria_toolkit_oss/sdr/pluto.py +++ b/src/ria_toolkit_oss/sdr/pluto.py @@ -274,16 +274,20 @@ class Pluto(SDR): data = [self._convert_tx_samples(samples), self._convert_tx_samples(samples)] else: if len(recording) > 2: - warnings.warn("More recordings were provided than channels in the Pluto. \ - Only the first two recordings will be used") + warnings.warn( + "More recordings were provided than channels in the Pluto. \ + Only the first two recordings will be used" + ) sample0 = self._convert_tx_samples(recording.data[0]) sample1 = self._convert_tx_samples(recording.data[1]) data = [sample0, sample1] elif isinstance(recording, list): if len(recording) > 2: - warnings.warn("More recordings were provided than channels in the Pluto. \ - Only the first two recordings will be used") + warnings.warn( + "More recordings were provided than channels in the Pluto. \ + Only the first two recordings will be used" + ) if isinstance(recording[0], np.ndarray): data = [self._convert_tx_samples(recording[0]), self._convert_tx_samples(recording[1])] @@ -423,8 +427,10 @@ class Pluto(SDR): if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This sets \ - the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This sets \ + the gain relative to the maximum possible gain." + ) else: abs_gain = rx_gain_max + gain else: @@ -534,8 +540,10 @@ class Pluto(SDR): if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This sets\ - the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This sets\ + the gain relative to the maximum possible gain." + ) else: abs_gain = tx_gain_max + gain else: diff --git a/src/ria_toolkit_oss/sdr/rtlsdr.py b/src/ria_toolkit_oss/sdr/rtlsdr.py index bae677a..d49ab6e 100644 --- a/src/ria_toolkit_oss/sdr/rtlsdr.py +++ b/src/ria_toolkit_oss/sdr/rtlsdr.py @@ -131,15 +131,19 @@ class RTLSDR(SDR): if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This sets\ - the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This sets\ + the gain relative to the maximum possible gain." + ) target_gain = max_gain + gain else: target_gain = gain if target_gain < min_gain or target_gain > max_gain: - print(f"Requested gain {target_gain} dB out of range;\ - clamping to valid span {min_gain}-{max_gain} dB.") + print( + f"Requested gain {target_gain} dB out of range;\ + clamping to valid span {min_gain}-{max_gain} dB." + ) target_gain = min(max(target_gain, min_gain), max_gain) target_gain = min(available_gains, key=lambda g: abs(g - target_gain)) diff --git a/src/ria_toolkit_oss/sdr/thinkrf.py b/src/ria_toolkit_oss/sdr/thinkrf.py index adc25ff..7d108ab 100644 --- a/src/ria_toolkit_oss/sdr/thinkrf.py +++ b/src/ria_toolkit_oss/sdr/thinkrf.py @@ -392,8 +392,10 @@ class ThinkRF(SDR): actual_sample_rate = self.BASE_SAMPLE_RATE / decimation if abs(actual_sample_rate - requested_sample_rate) > 1e3: # More than 1 kHz difference - print(f"ThinkRF: Requested {requested_sample_rate/1e6:.2f} MS/s → \ - Using decimation={decimation} ({actual_sample_rate/1e6:.2f} MS/s)") + print( + f"ThinkRF: Requested {requested_sample_rate/1e6:.2f} MS/s → \ + Using decimation={decimation} ({actual_sample_rate/1e6:.2f} MS/s)" + ) return decimation, actual_sample_rate diff --git a/src/ria_toolkit_oss/sdr/usrp.py b/src/ria_toolkit_oss/sdr/usrp.py index 70bbc46..f458378 100644 --- a/src/ria_toolkit_oss/sdr/usrp.py +++ b/src/ria_toolkit_oss/sdr/usrp.py @@ -148,8 +148,10 @@ class USRP(SDR): gain_range = self.usrp.get_rx_gain_range() if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This sets\ - the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This sets\ + the gain relative to the maximum possible gain." + ) else: # set gain relative to max abs_gain = gain_range.stop() + gain @@ -354,8 +356,10 @@ class USRP(SDR): gain_range = self.usrp.get_tx_gain_range() if gain_mode == "relative": if gain > 0: - raise SDRParameterError("When gain_mode = 'relative', gain must be < 0. This sets\ - the gain relative to the maximum possible gain.") + raise SDRParameterError( + "When gain_mode = 'relative', gain must be < 0. This sets\ + the gain relative to the maximum possible gain." + ) else: # set gain relative to max abs_gain = gain_range.stop() + gain diff --git a/src/ria_toolkit_oss/signal/block_generator/basic/add.py b/src/ria_toolkit_oss/signal/block_generator/basic/add.py index fe59f16..9830f7b 100644 --- a/src/ria_toolkit_oss/signal/block_generator/basic/add.py +++ b/src/ria_toolkit_oss/signal/block_generator/basic/add.py @@ -37,8 +37,10 @@ class Add(RecordableBlock, ProcessBlock): samples = block.get_samples(num_samples) if len(samples) != num_samples: - raise ValueError(f"Block {self.__class__.__name__} requested {num_samples} \ - from block {block.__class__.__name__} but got {len(samples)}.") + raise ValueError( + f"Block {self.__class__.__name__} requested {num_samples} \ + from block {block.__class__.__name__} but got {len(samples)}." + ) return samples diff --git a/src/ria_toolkit_oss/signal/block_generator/frequency_translation/upconversion.py b/src/ria_toolkit_oss/signal/block_generator/frequency_translation/upconversion.py index c0272c3..36b7117 100644 --- a/src/ria_toolkit_oss/signal/block_generator/frequency_translation/upconversion.py +++ b/src/ria_toolkit_oss/signal/block_generator/frequency_translation/upconversion.py @@ -1,4 +1,5 @@ import numpy as np + from ria_toolkit_oss.signal.block_generator.block import Block from ria_toolkit_oss.signal.block_generator.data_types import DataType diff --git a/src/ria_toolkit_oss/signal/block_generator/process_block.py b/src/ria_toolkit_oss/signal/block_generator/process_block.py index 98eccd1..4b618cd 100644 --- a/src/ria_toolkit_oss/signal/block_generator/process_block.py +++ b/src/ria_toolkit_oss/signal/block_generator/process_block.py @@ -23,9 +23,11 @@ class ProcessBlock(Block, ABC): ) elif not all(isinstance(item, Block) for item in input): - raise ValueError(f"Invalid input to block '{self.__class__.__name__}'. \ + raise ValueError( + f"Invalid input to block '{self.__class__.__name__}'. \ Expected a list of Block objects but got \ - {'[' + ',' .join(f'{item.__class__.__name__}({repr(item)})' for item in input) + ']'}") + {'[' + ',' .join(f'{item.__class__.__name__}({repr(item)})' for item in input) + ']'}" + ) elif len(input) != len(self.input_type): raise ValueError( diff --git a/src/ria_toolkit_oss/signal/block_generator/recordable_block.py b/src/ria_toolkit_oss/signal/block_generator/recordable_block.py index 28f2f2b..4b63648 100644 --- a/src/ria_toolkit_oss/signal/block_generator/recordable_block.py +++ b/src/ria_toolkit_oss/signal/block_generator/recordable_block.py @@ -20,8 +20,10 @@ class RecordableBlock(Block, Recordable): :raises ValueError: If the number of samples is incorrect.""" samples = self.get_samples(num_samples) if len(samples) != num_samples: - raise ValueError(f"Error in block {self.__class__.__name__} record(). \ - Requested {num_samples} samples but got {len(samples)}") + raise ValueError( + f"Error in block {self.__class__.__name__} record(). \ + Requested {num_samples} samples but got {len(samples)}" + ) metadata = self._get_metadata() return Recording(data=samples, metadata=metadata) diff --git a/src/ria_toolkit_oss/signal/block_generator/source/recording_source.py b/src/ria_toolkit_oss/signal/block_generator/source/recording_source.py index 8a1e642..1b7795a 100644 --- a/src/ria_toolkit_oss/signal/block_generator/source/recording_source.py +++ b/src/ria_toolkit_oss/signal/block_generator/source/recording_source.py @@ -39,7 +39,9 @@ class RecordingSource(SourceBlock, RecordableBlock): :raises ValueError: If num_samples is greater than the recording length. """ if num_samples - 1 >= self.recording.data.shape[1]: - raise ValueError(f"{num_samples} samples requested from recording source with \ - {self.recording.data.shape[1]} samples available.") + raise ValueError( + f"{num_samples} samples requested from recording source with \ + {self.recording.data.shape[1]} samples available." + ) return self.recording.data[0, 0:num_samples] diff --git a/src/ria_toolkit_oss/transforms/iq_augmentations.py b/src/ria_toolkit_oss/transforms/iq_augmentations.py index 106f151..ca859a0 100644 --- a/src/ria_toolkit_oss/transforms/iq_augmentations.py +++ b/src/ria_toolkit_oss/transforms/iq_augmentations.py @@ -610,8 +610,10 @@ def cut_out( # noqa: C901 # TODO: Simplify function raise ValueError("signal must be CxN complex.") if fill_type not in {"zeros", "ones", "low-snr", "avg-snr", "high-snr"}: - raise UserWarning("""fill_type must be "zeros", "ones", "low-snr", "avg-snr", or "high-snr", - "ones" has been selected by default""") + raise UserWarning( + """fill_type must be "zeros", "ones", "low-snr", "avg-snr", or "high-snr", + "ones" has been selected by default""" + ) if max_section_size < 1 or max_section_size >= n: raise ValueError("max_section_size must be at least 1 and must be less than the length of signal.") diff --git a/src/ria_toolkit_oss/view/view_signal.py b/src/ria_toolkit_oss/view/view_signal.py index 86cfbe7..ded3c8c 100644 --- a/src/ria_toolkit_oss/view/view_signal.py +++ b/src/ria_toolkit_oss/view/view_signal.py @@ -4,7 +4,6 @@ import textwrap from typing import Optional import matplotlib.pyplot as plt -from matplotlib.patches import Patch import numpy as np from matplotlib import gridspec from matplotlib.patches import Patch @@ -14,7 +13,12 @@ from scipy.signal import spectrogram from scipy.signal.windows import hann from ria_toolkit_oss.datatypes.recording import Recording -from ria_toolkit_oss.view.tools import COLORS, decimate, extract_metadata_fields, set_path +from ria_toolkit_oss.view.tools import ( + COLORS, + decimate, + extract_metadata_fields, + set_path, +) def get_fft_size(plot_length): @@ -59,13 +63,6 @@ def view_annotations( annotations = recording.annotations # 2. Setup Color Mapping - available_colors = [ - COLORS.get("magenta", "magenta"), - COLORS.get("accent", "cyan"), - COLORS.get("light", "white"), - "lime", - ] - palette = ["#2196F3", "#9C27B0", "#64B5F6", "#7B1FA2", "#5C6BC0", "#CE93D8", "#1565C0", "#7C4DFF"] unique_labels = sorted(list(set(ann.label for ann in annotations if ann.label))) label_to_color = {label: palette[i % len(palette)] for i, label in enumerate(unique_labels)} diff --git a/src/ria_toolkit_oss/view/view_signal_simple.py b/src/ria_toolkit_oss/view/view_signal_simple.py index d97452e..1b847ab 100644 --- a/src/ria_toolkit_oss/view/view_signal_simple.py +++ b/src/ria_toolkit_oss/view/view_signal_simple.py @@ -13,7 +13,12 @@ from scipy.fft import fft, fftshift from scipy.signal.windows import hann from ria_toolkit_oss.datatypes.recording import Recording -from ria_toolkit_oss.view.tools import COLORS, decimate, extract_metadata_fields, set_path +from ria_toolkit_oss.view.tools import ( + COLORS, + decimate, + extract_metadata_fields, + set_path, +) def _add_annotations(annotations, compact_mode, show_labels, sample_rate_hz, center_freq_hz, ax2): diff --git a/src/ria_toolkit_oss_cli/ria_toolkit_oss/annotate.py b/src/ria_toolkit_oss_cli/ria_toolkit_oss/annotate.py index cdfabb5..4a8d6ac 100644 --- a/src/ria_toolkit_oss_cli/ria_toolkit_oss/annotate.py +++ b/src/ria_toolkit_oss_cli/ria_toolkit_oss/annotate.py @@ -14,7 +14,10 @@ from ria_toolkit_oss.annotations import ( from ria_toolkit_oss.datatypes import Annotation from ria_toolkit_oss.datatypes.recording import Recording from ria_toolkit_oss.io import load_recording, to_blue, to_npy, to_sigmf, to_wav -from ria_toolkit_oss_cli.ria_toolkit_oss.common import format_frequency, format_sample_count +from ria_toolkit_oss_cli.ria_toolkit_oss.common import ( + format_frequency, + format_sample_count, +) def normalize_sigmf_path(filepath): @@ -658,7 +661,12 @@ def cusum(input, label, min_duration, window_size, tolerance, annotation_type, o @click.argument("input", type=click.Path(exists=True)) @click.option("--threshold", type=float, required=True, help="Threshold (0.0-1.0, fraction of max magnitude)") @click.option("--label", type=str, default=None, help="Annotation label") -@click.option("--window-size", type=int, default=None, help="Smoothing window size in samples (default: 1ms at recording sample rate)") +@click.option( + "--window-size", + type=int, + default=None, + help="Smoothing window size in samples (default: 1ms at recording sample rate)", +) @click.option( "--type", "annotation_type", diff --git a/src/ria_toolkit_oss_cli/ria_toolkit_oss/commands.py b/src/ria_toolkit_oss_cli/ria_toolkit_oss/commands.py index 53cf37f..b545366 100644 --- a/src/ria_toolkit_oss_cli/ria_toolkit_oss/commands.py +++ b/src/ria_toolkit_oss_cli/ria_toolkit_oss/commands.py @@ -18,7 +18,7 @@ from .init import init from .split import split from .transform import transform from .transmit import transmit -from .view import viewe +from .view import viewe # Aliases synth = generate diff --git a/src/ria_toolkit_oss_cli/ria_toolkit_oss/view.py b/src/ria_toolkit_oss_cli/ria_toolkit_oss/view.py index b1748f6..0a7fa62 100644 --- a/src/ria_toolkit_oss_cli/ria_toolkit_oss/view.py +++ b/src/ria_toolkit_oss_cli/ria_toolkit_oss/view.py @@ -34,13 +34,12 @@ VISUALIZATION_TYPES = { "spines", ], }, - "annotations": { + "annotations": { "function": view_annotations, "description": "Annotation-focused spectrogram view", "options": ["channel", "dark"], }, "channels": {"function": view_channels, "description": "Multi-channel IQ and spectrogram view", "options": []}, - "annotations": {"function": view_annotations, "description": "Annotated spectrogram view", "options": ["channel", "dark"]}, }