Skip to content

Commit 9b29a22

Browse files
committed
Fixed Python/SciPy compatibility issues, updated GitHub CI testing matrix
1 parent 6899dab commit 9b29a22

File tree

5 files changed

+61
-39
lines changed

5 files changed

+61
-39
lines changed

.github/workflows/gmsvtoolkit-ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ on: push
44

55
jobs:
66
gmsvtoolkit-build-linux:
7-
runs-on: ubuntu-20.04
7+
runs-on: ubuntu-latest
88
strategy:
99
matrix:
10-
python-version: [ "3.7", "3.8", "3.9", "3.10" ]
10+
python-version: [ "3.8", "3.9", "3.10", "3.11", "3,12" ]
1111
steps:
1212
- name: set GMSVTOOLKIT_DIR
1313
run: echo "GMSVTOOLKIT_BASE_DIR=$RUNNER_WORKSPACE/gmsvtoolkit" >> $GITHUB_ENV
@@ -18,8 +18,8 @@ jobs:
1818
- name: configure Python
1919
run: |
2020
sudo apt-get update
21-
sudo apt-get install g++-8 -y
22-
sudo apt-get install gfortran-8 -y
21+
sudo apt-get install g++ -y
22+
sudo apt-get install gfortran -y
2323
pip install numpy
2424
pip install scipy
2525
pip install matplotlib

gmsvtoolkit/metrics/rzz2015.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"""
33
BSD 3-Clause License
44
5-
Copyright (c) 2023, University of Southern California
5+
Copyright (c) 2025, University of Southern California
66
All rights reserved.
77
88
Redistribution and use in source and binary forms, with or without
@@ -47,6 +47,12 @@
4747
mpl.use('Agg') # Disable use of Tk/X11
4848
import pylab
4949

50+
# Compatible with SciPy 1.4
51+
try:
52+
cumulative_trapezoid = integrate.cumulative_trapezoid
53+
except AttributeError:
54+
cumulative_trapezoid = integrate.cumtrapz
55+
5056
# Import GMSV Toolkit modules
5157
from plots import plot_config
5258
from utils import os_utilities
@@ -98,7 +104,7 @@ def arias(self, F, dt, percent):
98104
n = len(F)
99105

100106
a_i = [pow(value, 2) for value in F]
101-
I = integrate.cumtrapz(a_i) * dt
107+
I = cumulative_trapezoid(a_i) * dt
102108
# Arias Intensity
103109
Ia = (F[0]**2) * dt / 2.0 + I[n-2] + (F[n-1]**2) * dt / 2.0
104110
It = (percent / 100.0) * Ia

gmsvtoolkit/stats/anderson_gof.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22
"""
33
BSD 3-Clause License
44
5-
Copyright (c) 2023, University of Southern California
5+
Copyright (c) 2025, University of Southern California
66
All rights reserved.
77
88
Redistribution and use in source and binary forms, with or without
@@ -53,6 +53,16 @@
5353
from scipy import signal, stats
5454
from scipy.signal import butter, filtfilt
5555

56+
# Compatible with SciPy 1.4
57+
try:
58+
cumulative_trapezoid = integrate.cumulative_trapezoid
59+
except AttributeError:
60+
cumulative_trapezoid = integrate.cumtrapz
61+
try:
62+
simpson = integrate.simpson
63+
except AttributeError:
64+
simpson = integrate.simps
65+
5666
# Import GMSVToolkit modules
5767
from core import gmsvtoolkit_config
5868
from core.station_list import StationList
@@ -175,15 +185,15 @@ def eval_func2(p1, p2):
175185

176186
@staticmethod
177187
def integral(x, idt):
178-
return integrate.simps(x, x=None, dx=idt)
188+
return simpson(x, x=None, dx=idt)
179189

180190
@staticmethod
181191
def integral2(x, idt):
182-
return integrate.simps(x * x, x=None, dx=idt)
192+
return simpson(x * x, x=None, dx=idt)
183193

184194
@staticmethod
185195
def integ(array_in, idt):
186-
return integrate.cumtrapz(array_in, dx=idt)
196+
return cumulative_trapezoid(array_in, dx=idt)
187197

188198
@staticmethod
189199
def shift_bit_length(x):

gmsvtoolkit/tests/UnitTests.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"""
33
BSD 3-Clause License
44
5-
Copyright (c) 2023, University of Southern California
5+
Copyright (c) 2025, University of Southern California
66
All rights reserved.
77
88
Redistribution and use in source and binary forms, with or without
@@ -104,29 +104,29 @@ def close(self):
104104
TS = unittest.TestSuite()
105105

106106
# Add GMSVToolkit tests
107-
TS.addTest(unittest.makeSuite(TestPyNGA))
108-
TS.addTest(unittest.makeSuite(TestPEERFormat))
109-
TS.addTest(unittest.makeSuite(TestRotDXX))
110-
TS.addTest(unittest.makeSuite(TestPlotRotDXX))
111-
TS.addTest(unittest.makeSuite(TestPSAGoF))
112-
TS.addTest(unittest.makeSuite(TestPlotPSAGoF))
113-
TS.addTest(unittest.makeSuite(TestPlotMap))
114-
TS.addTest(unittest.makeSuite(TestPlotFAS))
115-
TS.addTest(unittest.makeSuite(TestPlotFASComparison))
116-
TS.addTest(unittest.makeSuite(TestFAS))
117-
TS.addTest(unittest.makeSuite(TestFASGoF))
118-
TS.addTest(unittest.makeSuite(TestPlotFASGoF))
119-
TS.addTest(unittest.makeSuite(TestCalcGMPE))
120-
TS.addTest(unittest.makeSuite(TestPlotGMPE))
121-
TS.addTest(unittest.makeSuite(TestGMPEGoF))
122-
TS.addTest(unittest.makeSuite(TestPlotGMPEGoF))
123-
TS.addTest(unittest.makeSuite(TestAndersonGoF))
124-
TS.addTest(unittest.makeSuite(TestPlotSeismograms))
125-
TS.addTest(unittest.makeSuite(TestGMSVTools))
126-
TS.addTest(unittest.makeSuite(TestTimeseries))
127-
TS.addTest(unittest.makeSuite(TestAS16))
128-
TS.addTest(unittest.makeSuite(TestRZZ2015GMPE))
129-
TS.addTest(unittest.makeSuite(TestRZZ2015))
107+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPyNGA))
108+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPEERFormat))
109+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestRotDXX))
110+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotRotDXX))
111+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPSAGoF))
112+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotPSAGoF))
113+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotMap))
114+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotFAS))
115+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotFASComparison))
116+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestFAS))
117+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestFASGoF))
118+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotFASGoF))
119+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestCalcGMPE))
120+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotGMPE))
121+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestGMPEGoF))
122+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotGMPEGoF))
123+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestAndersonGoF))
124+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestPlotSeismograms))
125+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestGMSVTools))
126+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestTimeseries))
127+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestAS16))
128+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestRZZ2015GMPE))
129+
TS.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestRZZ2015))
130130

131131
# Done, run the tests
132132
print("==> Running GMSVToolkit Unit Tests...")

gmsvtoolkit/utils/gmsv_library.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"""
33
BSD 3-Clause License
44
5-
Copyright (c) 2023, University of Southern California
5+
Copyright (c) 2025, University of Southern California
66
All rights reserved.
77
88
Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,14 @@
3737
# Import Python modules
3838
import math
3939
import numpy as np
40-
from scipy.integrate import cumtrapz
41-
from scipy.signal import kaiser
40+
import scipy.integrate
41+
from scipy.signal.windows import kaiser
42+
43+
# Compatible with SciPy 1.4
44+
try:
45+
cumulative_trapezoid = scipy.integrate.cumulative_trapezoid
46+
except AttributeError:
47+
cumulative_trapezoid = scipy.integrate.cumtrapz
4248

4349
def integrate(data, dt):
4450
"""
@@ -51,7 +57,7 @@ def integrate(data, dt):
5157
Outputs:
5258
newdata - data array after integration
5359
"""
54-
newdata = cumtrapz(data, dx=dt, initial=0) + data[0] * dt / 2.0
60+
newdata = cumulative_trapezoid(data, dx=dt, initial=0) + data[0] * dt / 2.0
5561

5662
return newdata
5763

0 commit comments

Comments
 (0)