File add_default_to_switch_statement.patch of Package python-PyWavelets
From 91b0a7bdbdd181bfb765246a9ec949b1cf2d12ad Mon Sep 17 00:00:00 2001
From: "Gregory R. Lee" <grlee77@gmail.com>
Date: Sat, 10 Dec 2016 03:23:39 -0500
Subject: [PATCH] MAINT: add default to switch statement for
is_discrete_wavelet
on the Cython side, raise an error if is_discrete_wavelet returns -1
---
pywt/_extensions/_pywt.pyx | 15 ++++++++++++---
pywt/_extensions/c/wavelets.c | 2 ++
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/pywt/_extensions/_pywt.pyx b/pywt/_extensions/_pywt.pyx
index 5928d9e7..c9b10a1f 100644
--- a/pywt/_extensions/_pywt.pyx
+++ b/pywt/_extensions/_pywt.pyx
@@ -33,6 +33,15 @@ _attr_deprecation_msg = ('{old} has been renamed to {new} and will '
'of pywt.')
+# raises exception if the wavelet name is undefined
+cdef int is_discrete_wav(WAVELET_NAME name):
+ cdef int is_discrete
+ discrete = wavelet.is_discrete_wavelet(name)
+ if discrete == -1:
+ raise ValueError("unrecognized wavelet family name")
+ return discrete
+
+
class _Modes(object):
"""
Because the most common and practical way of representing digital signals
@@ -206,7 +215,7 @@ def wavelist(family=None, kind='all'):
return True
family_code, family_number = wname_to_code(name)
- is_discrete = wavelet.is_discrete_wavelet(family_code)
+ is_discrete = is_discrete_wav(family_code)
if kind == 'discrete':
return is_discrete
else:
@@ -299,7 +308,7 @@ def DiscreteContinuousWavelet(name=u"", object filter_bank=None):
if filter_bank is None:
name = name.lower()
family_code, family_number = wname_to_code(name)
- if (wavelet.is_discrete_wavelet(family_code)):
+ if is_discrete_wav(family_code):
return Wavelet(name, filter_bank)
else:
return ContinuousWavelet(name)
@@ -334,7 +343,7 @@ cdef public class Wavelet [type WaveletType, object WaveletObject]:
# builtin wavelet
self.name = name.lower()
family_code, family_number = wname_to_code(self.name)
- if (wavelet.is_discrete_wavelet(family_code)):
+ if is_discrete_wav(family_code):
self.w = <wavelet.DiscreteWavelet*> wavelet.discrete_wavelet(family_code, family_number)
if self.w is NULL:
raise ValueError("Invalid wavelet name.")
diff --git a/pywt/_extensions/c/wavelets.c b/pywt/_extensions/c/wavelets.c
index bc783af4..21b4c672 100644
--- a/pywt/_extensions/c/wavelets.c
+++ b/pywt/_extensions/c/wavelets.c
@@ -42,6 +42,8 @@ int is_discrete_wavelet(WAVELET_NAME name)
return 0;
case CMOR:
return 0;
+ default:
+ return -1;
}
}