From 61be48419b8d1bd77d53ec0c55805520cc3f9497 Mon Sep 17 00:00:00 2001 From: Olle Hansson <olle.hansson@liu.se> Date: Fri, 24 Feb 2023 12:39:56 +0100 Subject: [PATCH] Added doc and test for signalgenerator FromFile --- b_asic/GUI/signal_generator_input.py | 5 +++++ b_asic/signal_generator.py | 12 +++++++++--- test/test_signal_generator.py | 13 +++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/b_asic/GUI/signal_generator_input.py b/b_asic/GUI/signal_generator_input.py index a2db9aa0..6c20dfa0 100644 --- a/b_asic/GUI/signal_generator_input.py +++ b/b_asic/GUI/signal_generator_input.py @@ -103,6 +103,11 @@ class ZeroPadInput(SignalGeneratorInput): class FromFileInput(SignalGeneratorInput): + """ + Class for graphically configuring and generating a + :class:`~b_asic.signal_generators.FromFile` signal generator. + """ + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.file_label = QLabel("Browse") diff --git a/b_asic/signal_generator.py b/b_asic/signal_generator.py index 45840415..debab6dc 100644 --- a/b_asic/signal_generator.py +++ b/b_asic/signal_generator.py @@ -13,6 +13,7 @@ if you want more information. from math import pi, sin from numbers import Number +from pathlib import Path from typing import Optional, Sequence import numpy as np @@ -172,12 +173,17 @@ class FromFile(SignalGenerator): """ def __init__(self, path) -> None: + try: + Path(path).resolve(strict=True) + except FileNotFoundError: + raise Exception("Selected input file not found.") + try: data = np.loadtxt(path, dtype=complex).tolist() self._data = data self._len = len(data) - except FileNotFoundError: - self._window.logger.error(f"Selected input file not found.") + except ValueError: + raise Exception("Selected input file is not of the right format.") def __call__(self, time: int) -> complex: if 0 <= time < self._len: @@ -185,7 +191,7 @@ class FromFile(SignalGenerator): return 0.0 def __repr__(self) -> str: - return f"ZeroPad({self._data})" + return f"FromFile({self._data})" class Sinusoid(SignalGenerator): diff --git a/test/test_signal_generator.py b/test/test_signal_generator.py index b982e6cc..213e7062 100644 --- a/test/test_signal_generator.py +++ b/test/test_signal_generator.py @@ -1,3 +1,4 @@ +import os from math import sqrt import pytest @@ -5,6 +6,7 @@ import pytest from b_asic.signal_generator import ( Constant, Delay, + FromFile, Gaussian, Impulse, Sinusoid, @@ -269,3 +271,14 @@ def test_division(): assert str(g) == "Sinusoid(0.5, 0.25) / (0.5 * Step())" assert isinstance(g, _DivGenerator) + + +def test_fromfile(): + absolute_path = os.path.dirname(__file__) + relative_path = "../examples/input.csv" + full_path = os.path.join(absolute_path, relative_path) + g = FromFile(full_path) + assert g(-1) == 0.0 + assert g(0) == 0 + assert g(1) == 1 + assert g(2) == 0 -- GitLab