Skip to content

Commit

Permalink
Merge pull request #399 from slwatkins/tests/create_fixed_time_pickof…
Browse files Browse the repository at this point in the history
…f_test

Add `fixed_time_pickoff` unit test
  • Loading branch information
gipert authored Oct 25, 2022
2 parents ef2ee9e + 39916a1 commit f8dda1a
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ jobs:
pytest --cov=pygama --cov-report=xml
- name: Upload Coverage to codecov.io
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true

test-docs:
name: Build documentation
Expand Down
116 changes: 116 additions & 0 deletions tests/dsp/processors/test_fixed_time_pickoff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import numpy as np
import pytest

from pygama.dsp.errors import DSPFatal
from pygama.dsp.processors import fixed_time_pickoff


def test_fixed_time_pickoff():
"""Testing function for the fixed_time_pickoff processor."""

len_wf = 20

# test for nan if w_in has a nan
w_in = np.ones(len_wf)
w_in[4] = np.nan
assert np.isnan(fixed_time_pickoff(w_in, 1, ord("i")))

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, 1, ord("i"), a_out)
assert np.isnan(a_out[0])

# test for nan if nan is passed to t_in
w_in = np.ones(len_wf)
assert np.isnan(fixed_time_pickoff(w_in, np.nan, ord("i")))

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, np.nan, ord("i"), a_out)
assert np.isnan(a_out[0])

# test for nan if t_in is negative
w_in = np.ones(len_wf)
assert np.isnan(fixed_time_pickoff(w_in, -1, ord("i")))

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, -1, ord("i"), a_out)
assert np.isnan(a_out[0])

# test for nan if t_in is too large
w_in = np.ones(len_wf)
assert np.isnan(fixed_time_pickoff(w_in, len_wf, ord("i")))

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, len_wf, ord("i"), a_out)
assert np.isnan(a_out[0])

# test for DSPFatal errors being raised
# noninteger t_in with integer interpolation
with pytest.raises(DSPFatal):
w_in = np.ones(len_wf)
fixed_time_pickoff(w_in, 1.5, ord("i"))

with pytest.raises(DSPFatal):
a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, 1.5, ord("i"), a_out)

# unsupported mode_in character
with pytest.raises(DSPFatal):
w_in = np.ones(len_wf)
fixed_time_pickoff(w_in, 1.5, ord(" "))

with pytest.raises(DSPFatal):
a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, 1.5, ord(" "), a_out)

# linear tests
w_in = np.arange(len_wf, dtype=float)
assert fixed_time_pickoff(w_in, 3, ord("i")) == 3

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, 3, ord("i"), a_out)
assert a_out[0] == 3

chars = ["n", "f", "c", "l", "h", "s"]
sols = [4, 3, 4, 3.5, 3.5, 3.5]

for char, sol in zip(chars, sols):
assert fixed_time_pickoff(w_in, 3.5, ord(char)) == sol

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, 3.5, ord(char), a_out)
assert a_out[0] == sol

# sine wave tests
w_in = np.sin(np.arange(len_wf))

chars = ["n", "f", "c", "l", "h", "s"]
sols = [
0.1411200080598672,
0.1411200080598672,
-0.7568024953079282,
-0.08336061778208165,
-0.09054574599004982,
-0.10707938709427486,
]

for char, sol in zip(chars, sols):
assert np.isclose(fixed_time_pickoff(w_in, 3.25, ord(char)), sol)

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, 3.25, ord(char), a_out)
assert np.isclose(a_out[0], sol)

# last few corner cases of 'h'
w_in = np.sin(np.arange(len_wf))
ftps = [0.2, len_wf - 1.8]
sols = [
0.1806725096462211,
-0.6150034250096629,
]

for ftp, sol in zip(ftps, sols):
assert np.isclose(fixed_time_pickoff(w_in, ftp, ord("h")), sol)

a_out = np.empty(len_wf)
fixed_time_pickoff.__wrapped__(w_in, ftp, ord("h"), a_out)
assert np.isclose(a_out[0], sol)

0 comments on commit f8dda1a

Please sign in to comment.