Skip to content

Commit 4d0d082

Browse files
EliEli
authored andcommitted
Fixed more cases of interval division and added some tests.
1 parent 69e3bfe commit 4d0d082

File tree

3 files changed

+24
-24
lines changed

3 files changed

+24
-24
lines changed

tests/test_interval_ops.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,57 @@
11
import pytest
22
import pandas as pd
3-
from vtools.data.vtime import safe_divide_interval
3+
from vtools.data.vtime import divide_interval
44

55

66
def test_int_division():
7-
assert safe_divide_interval(24, 1) == 24
7+
assert divide_interval(24, 1) == 24
88

99

1010
def test_string_offsets():
11-
assert safe_divide_interval("1D", "1h") == 24
12-
assert safe_divide_interval("15min", "5min") == 3
11+
assert divide_interval("1D", "1h") == 24
12+
assert divide_interval("15min", "5min") == 3
1313

1414

1515
def test_timedelta():
16-
assert safe_divide_interval(pd.Timedelta("1D"), pd.Timedelta("1h")) == 24
16+
assert divide_interval(pd.Timedelta("1D"), pd.Timedelta("1h")) == 24
1717

1818

1919
def test_mixed_types():
20-
assert safe_divide_interval("1D", pd.Timedelta("1h")) == 24
21-
assert safe_divide_interval(pd.Timedelta("1D"), "1h") == 24
20+
assert divide_interval("1D", pd.Timedelta("1h")) == 24
21+
assert divide_interval(pd.Timedelta("1D"), "1h") == 24
2222

2323

2424
def test_non_integer_division_fails():
2525
with pytest.raises(ValueError):
26-
safe_divide_interval("1D", "7h")
26+
divide_interval("1D", "7h")
2727

2828

2929
def test_month_rejected():
3030
with pytest.raises(TypeError):
31-
safe_divide_interval("1M", "1D")
31+
divide_interval("1M", "1D")
3232

3333

3434
def test_year_rejected():
3535
with pytest.raises(TypeError):
36-
safe_divide_interval("1Y", "1D")
36+
divide_interval("1Y", "1D")
3737

3838

3939
def test_zero_division():
4040
with pytest.raises(ZeroDivisionError):
41-
safe_divide_interval("1D", "0H")
41+
divide_interval("1D", "0H")
4242

4343
def test_ratio_ok_when_not_int_required():
44-
assert safe_divide_interval("1D", "7h", require_int=False) == pytest.approx(24/7)
44+
assert divide_interval("1D", "7h", require_int=False) == pytest.approx(24/7)
4545

4646
def test_mixed_scalar_interval_rejected():
4747
with pytest.raises(TypeError):
48-
safe_divide_interval(24, "1h")
48+
divide_interval(24, "1h")
4949
with pytest.raises(TypeError):
50-
safe_divide_interval("1h", 24)
50+
divide_interval("1h", 24)
5151

5252

5353
def test_zero_division():
5454
with pytest.raises(ZeroDivisionError):
55-
safe_divide_interval("1D", "0h")
55+
divide_interval("1D", "0h")
5656

5757

vtools/data/vtime.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import pandas as pd
1919

2020

21-
__all__ = ["seconds", "minutes", "hours", "days", "months", "years","to_timedelta", "safe_divide_interval"]
21+
__all__ = ["seconds", "minutes", "hours", "days", "months", "years","to_timedelta", "divide_interval"]
2222

2323

2424
def seconds(s):
@@ -144,7 +144,7 @@ def to_timedelta(x):
144144
return pd.Timedelta(off.nanos, unit="ns")
145145

146146

147-
def safe_divide_interval(a, b, *, tol=1e-12, require_int=True):
147+
def divide_interval(a, b, *, tol=1e-12, require_int=True):
148148
"""
149149
Divide two intervals (or two scalars) safely.
150150
@@ -168,7 +168,7 @@ def safe_divide_interval(a, b, *, tol=1e-12, require_int=True):
168168

169169
if a_is_num or b_is_num:
170170
raise TypeError(
171-
"safe_divide_interval does not support scalar/interval division; "
171+
"divide_interval does not support scalar/interval division; "
172172
"use explicit Timedelta scaling instead."
173173
)
174174

vtools/functions/filter.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from numpy import abs
55
import pandas as pd
66
import numpy as np
7-
from vtools import safe_divide_interval, seconds, minutes, hours
7+
from vtools import divide_interval, seconds, minutes, hours
88
from scipy.signal import lfilter, firwin, filtfilt
99
from scipy.signal import butter
1010
from scipy.ndimage import gaussian_filter1d
@@ -167,7 +167,7 @@ def cosine_lanczos(
167167
m = int(1.25 * 2.0 / cf)
168168
elif not isinstance(m, (int, np.integer)):
169169
try:
170-
m = safe_divide_interval(m, freq)
170+
m = divide_interval(m, freq)
171171
except Exception as e:
172172
raise TypeError(
173173
"filter_len was not an int or divisible by freq (probably a type incompatibility)"
@@ -382,7 +382,7 @@ def _lanczos_impl(
382382
m = int(1.25 * 2.0 / cf)
383383
elif type(m) != int:
384384
try:
385-
m = safe_divide_interval(m, freq)
385+
m = divide_interval(m, freq)
386386
except:
387387
raise TypeError(
388388
"filter_len was not an int or divisible by filter_len (probably a type incompatiblity)"
@@ -550,7 +550,7 @@ def butterworth(ts, cutoff_period=None, cutoff_frequency=None, order=4):
550550
if cf is None:
551551
if not (cutoff_period is None):
552552
cutoff_period = pd.tseries.frequencies.to_offset(cutoff_period)
553-
cf = 2.0 * safe_divide_interval(freq, cutoff_period, require_int=False)
553+
cf = 2.0 * divide_interval(freq, cutoff_period, require_int=False)
554554
else:
555555
cf = butterworth_cutoff_frequencies[interval]
556556

@@ -571,7 +571,7 @@ def generate_godin_fir(freq):
571571
freqstr = str(freq)
572572
if freqstr in _cached_filt_info:
573573
return _cached_filt_info[freqstr]
574-
dt_sec = safe_divide_interval(freq, seconds(1))
574+
dt_sec = divide_interval(freq, seconds(1))
575575
nsample24 = int(86400 // dt_sec) # 24 hours by dt (24 for hour, 96 for 15min)
576576
wts24 = np.zeros(nsample24, dtype="d")
577577
wts24[:] = 1.0 / nsample24
@@ -675,7 +675,7 @@ def ts_gaussian_filter(ts, sigma, order=0, mode="reflect", cval=0.0, truncate=4.
675675
"""
676676
freq = ts.index.freq
677677
if type(sigma) != int:
678-
sigma = safe_divide_interval(freq, sigma, require_int=True)
678+
sigma = divide_interval(freq, sigma, require_int=True)
679679

680680
if isinstance(ts, pd.Series):
681681
tsout = _gf1d(

0 commit comments

Comments
 (0)