diff --git a/.github/workflows/linux_test.yml b/.github/workflows/linux_test.yml index f6f5b75..7ddf070 100644 --- a/.github/workflows/linux_test.yml +++ b/.github/workflows/linux_test.yml @@ -22,7 +22,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-24.04] - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.11", "3.12"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/windows_test.yml b/.github/workflows/windows_test.yml index c3bb4af..901766c 100644 --- a/.github/workflows/windows_test.yml +++ b/.github/workflows/windows_test.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-2022] + os: [windows-2025] python-version: ["3.11", "3.12"] steps: - uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index cd09007..bc3027f 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ venv .vscode/ .ipynb_checkpoints/ demos/notebooks/.ipynb_checkpoints/example_1-checkpoint.ipynb +.virtual_documents/ diff --git a/.virtual_documents/demos/example_2.ipynb b/.virtual_documents/demos/example_2.ipynb deleted file mode 100644 index fbc2be3..0000000 --- a/.virtual_documents/demos/example_2.ipynb +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -import os -import sys -import shutil -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt - -# Import the classes necessary for structural analysis -from openquake.vmtk.units import units # oq-vtmk units class -from openquake.vmtk.calibration import calibrate_model # oq-vmtk sdof-to-mdof calibration class -from openquake.vmtk.modeller import modeller # oq-vmtk numerical modelling class -from openquake.vmtk.postprocessor import postprocessor # oq-vtmk postprocessing class -from openquake.vmtk.plotter import plotter # oq-vmtk plotting class -from openquake.vmtk.utilities import sorted_alphanumeric, import_from_pkl, export_to_pkl # oq-vmtk utility class - - - - - -# Define the directory of the ground-motion records -gm_directory = './in/records' - -# Define the main output directory -nrha_directory = './out/nltha' -os.makedirs(nrha_directory, exist_ok=True) - -# Define directory for temporary analysis outputs: it is used to store temporary .txt files used as accelerations recorders -temp_nrha_directory = os.path.join(nrha_directory,'temp') -os.makedirs(temp_nrha_directory, exist_ok=True) - - - - - -# Import the intensity measure dictionary (output from example 1) -ims = import_from_pkl(os.path.join(gm_directory, 'imls_esrm20.pkl')) - - - - - - - - -# Number of storeys -number_storeys = 2 - -# Relative floor heights list -floor_heights = [2.80, 2.80] - -# First-mode based participation factor -gamma = 1.33 - -# SDOF capacity (First row are Spectral Displacement [m] values - Second row are Spectral Acceleration [g] values) -sdof_capacity = np.array([[0.00060789, 0.00486316, 0.02420000, 0.04353684], - [0.10315200, 0.20630401, 0.12378241, 0.12502023]]).T -# Frame flag -isFrame = False - -# Soft-storey mechanism flag -isSOS = False - -# Degradation flag -mdof_degradation = True - -# Inherent damping -mdof_damping = 0.05 - - - - - -# Intensity measures to use for postprocessing cloud analyses -IMTs = ['PGA', 'SA(0.3s)', 'SA(0.6s)', 'SA(1.0s)','AvgSA'] - -# Damage thresholds (maximum peak storey drift values in rad) -damage_thresholds = [0.00150, 0.00545, 0.00952, 0.0135] - -# The lower limit to be applied for censoring edp values (below 0.1 the minimum threshold for slight damage is considered a negligible case) -lower_limit = 0.1*damage_thresholds[0] - -# The upper limit to be applied for consoring edp values (above 1.5 the maximum threshold is considered a collapse case) -censored_limit = 1.5*damage_thresholds[-1] - -# Define consequence model to relate structural damage to a decision variable (i.e., expected loss ratio) -consequence_model = [0.05, 0.20, 0.60, 1.00] # damage-to-loss ratios - - - - - - - - - - - -# Calibrate the model using the Lu et al. (2020) method -floor_masses, storey_disps, storey_forces, mdof_phi = calibrate_model(number_storeys, gamma, sdof_capacity, isFrame, isSOS) - -print('The mass of each floor (in tonnes):', floor_masses) -print('The first-mode shape used for calibration:', mdof_phi) - -# Plot the capacities to visualise the outcome of the calibration -for i in range(storey_disps.shape[0]): - plt.plot(np.concatenate(([0.0], storey_disps[i,:])), np.concatenate(([0.0], storey_forces[i,:]*9.81)), label = f'Storey #{i+1}') -plt.plot(np.concatenate(([0.0], sdof_capacity[:,0])), np.concatenate(([0.0], sdof_capacity[:,1]*9.81)), label = 'SDOF Capacity') -plt.xlabel('Storey Deformation [m]', fontsize= 16) -plt.ylabel('Storey Shear [kN]', fontsize = 16) -plt.legend(loc = 'lower right') -plt.grid(visible=True, which='major') -plt.grid(visible=True, which='minor') -plt.xlim([0.00, 0.03]) -plt.show() - - - - - -# Initialise MDOF storage lists -conv_index_list = [] # List for convergence indices -peak_disp_list = [] # List for peak floor displacement (returns all peak values along the building height) -peak_drift_list = [] # List for peak storey drift (returns all peak values along the building height) -peak_accel_list = [] # List for peak floor acceleration (returns all peak values along the building height) -max_peak_drift_list = [] # List for maximum peak storey drift (returns the maximum value) -max_peak_drift_dir_list = [] # List for maximum peak storey drift directions -max_peak_drift_loc_list = [] # List for maximum peak storey drift locations -max_peak_accel_list = [] # List for maximum peak floor acceleration (returns the maximum value) -max_peak_accel_dir_list = [] # List for maximum peak floor acceleration directions -max_peak_accel_loc_list = [] # List for maximum peak floor acceleration locations - -# Loop over ground-motion records, compile MDOF model and run NLTHA -gmrs = sorted_alphanumeric(os.listdir(os.path.join(gm_directory,'acc'))) # Sort the ground-motion records alphanumerically -dts = sorted_alphanumeric(os.listdir(os.path.join(gm_directory,'dts'))) # Sort the ground-motion time-step files alphanumerically - -# Run the analysis -for i in range(len(gmrs)): - ### Print post-processing iteration - print('================================================================') - print('============== Analysing: {:d} out of {:d} =================='.format(i+1, len(gmrs))) - print('================================================================') - - ### Compile the MDOF model - model = modeller(number_storeys, - floor_heights, - floor_masses, - storey_disps, - storey_forces*units.g, - mdof_degradation) # Initialise the class (Build the model) - - model.compile_model() # Compile the MDOF model - - if i==0: - model.plot_model() # Visualise the model (only on first iteration) - model.do_gravity_analysis() # Do gravity analysis - - if number_storeys == 1: - num_modes = 1 - else: - num_modes = 3 - T, phi = model.do_modal_analysis(num_modes = num_modes) # Do modal analysis and get period of vibration (Essential step for running NLTHA) - - ### Define ground motion objects - fnames = [os.path.join(gm_directory,'acc',f'{gmrs[i]}')] # Ground-motion record names - fdts = os.path.join(gm_directory,'dts',f'{dts[i]}') # Ground-motion time-step names - dt_gm = pd.read_csv(fdts, header=None)[pd.read_csv(fdts,header=None).columns[0]].loc[1]-\ - pd.read_csv(fdts, header=None)[pd.read_csv(fdts,header=None).columns[0]].loc[0] # Ground-motion time-step - t_max = pd.read_csv(fdts)[pd.read_csv(fdts).columns[0]].iloc[-1] # Ground-motion duration - - ### Define analysis params and do NLTHA - dt_ansys = dt_gm # Set the analysis time-step - sf = units.g # Set the scaling factor (if records are in g, a scaling factor of 9.81 m/s2 must be used to be consistent with opensees) - control_nodes, conv_index, peak_drift, peak_accel, max_peak_drift, max_peak_drift_dir, max_peak_drift_loc, max_peak_accel, max_peak_accel_dir, max_peak_accel_loc, peak_disp = model.do_nrha_analysis(fnames, - dt_gm, - sf, - t_max, - dt_ansys, - temp_nrha_directory, - pflag=False, - xi = mdof_damping) - - ### Store the analysis - conv_index_list.append(conv_index) - peak_drift_list.append(peak_drift) - peak_accel_list.append(peak_accel) - peak_disp_list.append(peak_disp) - max_peak_drift_list.append(max_peak_drift) - max_peak_drift_dir_list.append(max_peak_drift_dir) - max_peak_drift_loc_list.append(max_peak_drift_loc) - max_peak_accel_list.append(max_peak_accel) - max_peak_accel_dir_list.append(max_peak_accel_dir) - max_peak_accel_loc_list.append(max_peak_accel_loc) - -# Remove the temporary directory -shutil.rmtree(f'{temp_nrha_directory}') - -# Store the analysis results in a dictionary -ansys_dict = {} -labels = ['T','control_nodes', 'conv_index_list', - 'peak_drift_list','peak_accel_list', - 'max_peak_drift_list', 'max_peak_drift_dir_list', - 'max_peak_drift_loc_list','max_peak_accel_list', - 'max_peak_accel_dir_list','max_peak_accel_loc_list', - 'peak_disp_list'] - -for i, label in enumerate(labels): - ansys_dict[label] = vars()[f'{label}'] -# Export the analysis output variable to a pickle file using the "export_to_pkl" function from "utilities" -export_to_pkl(os.path.join(nrha_directory,'ansys_out.pkl'), ansys_dict) - -print('ANALYSIS COMPLETED!') - - - - - -# Initialise the postprocessor class -pp = postprocessor() - -# Initialise the plotter class -pl = plotter() - -# Loop over the intensity measure types and perform cloud regression to fit the probabilistic seismic demand-capacity model -for _, current_imt in enumerate(IMTs): - - # Import the current intensity measure type - imls = ims[f'{current_imt}'] - - # Import the engineering demand parameters (i.e., mpsd) from the analysis dictionary (processed from example 2) - edps = ansys_dict['max_peak_drift_list'] - - # Process cloud analysis results using the "do_cloud_analysis" function called from "postprocessor" - # The output will be automatically stored in a dictionary - cloud_dict = pp.do_cloud_analysis(imls, - edps, - damage_thresholds, - lower_limit, - censored_limit) - - ## Visualise the cloud analysis results - pl.plot_cloud_analysis(cloud_dict, - output_directory = None, - plot_label = f'cloud_analysis_{current_imt}', - xlabel = f'{current_imt} [g]', - ylabel = r'Maximum Peak Storey Drift, $\theta_{max}$ [%]') # The y-axis values of drift are converted to % automatically by the plotter - - ## Visualise the fragility functions - pl.plot_fragility_analysis(cloud_dict, - output_directory = None, - plot_label = f'fragility_{current_imt}', - xlabel = f'{current_imt}') - - ## Visualise the seismic demands - pl.plot_demand_profiles(ansys_dict['peak_drift_list'], - ansys_dict['peak_accel_list'], - ansys_dict['control_nodes'], - output_directory = None, - plot_label="seismic_demand_profiles") # The y-axis values of drift and acceleration are converted to % and g automatically by the plotter - - ## Visualise the entire set of results using subplots - pl.plot_ansys_results(cloud_dict, - ansys_dict['peak_drift_list'], - ansys_dict['peak_accel_list'], - ansys_dict['control_nodes'], - output_directory = None, - plot_label = f'analysis_output_{current_imt}', - cloud_xlabel = f'{current_imt}', - cloud_ylabel = r'Maximum Peak Storey Drift, $\theta_{max}$ [%]') - - - - - -# In this example, since the latest iteration of the previous cell uses 'AvgSA' as the intensity measure, -# then all variables stored inside the "cloud_dict" dictionary correspond to that same IM. Hence, -# the vulnerability function derived here will represent the continuous relationship of the expected -# structural loss ratio conditioned on increasing levels of ground-shaking expressed in terms of the -# average spectral acceleration (in g) - -structural_vulnerability = pp.get_vulnerability_function(cloud_dict['poes'], - consequence_model, - uncertainty=True) - - -# Plot the structural vulnerability function -pl.plot_vulnerability_analysis(structural_vulnerability['IMLs'], - structural_vulnerability['Loss'], - structural_vulnerability['COV'], - 'SA(1.0s)', - 'Structural Loss Ratio', - output_directory = None, - plot_label = 'Structural Vulnerability') - - -# The output is a DataFrame with three keys: IMLs (i.e., intensity measure levels), Loss and COV -print(structural_vulnerability) - - - diff --git a/.virtual_documents/demos/example_3.ipynb b/.virtual_documents/demos/example_3.ipynb deleted file mode 100644 index eb4ed3b..0000000 --- a/.virtual_documents/demos/example_3.ipynb +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -import os -import numpy as np -import pandas as pd - -# Import the classes necessary for postprocessing and visualising storey loss functions -from openquake.vmtk.plotter import plotter -from openquake.vmtk.slf_generator import slf_generator - -# Initialise the plotter classe -pl = plotter() - - - - - -# The set of drift- and acceleration-sensitive inventory of nonstructural components are compatible -# with the FEMA P-58 database and were obtained using the "Normative Quantity Estimation Tool" -# (https://femap58.atcouncil.org/supporting-materials) assuming a residential occupancy class - -inventory_directory = './in/inventory' - -# Load the inventory of drift-sensitive components -inventory_psd =pd.read_csv(os.path.join(inventory_directory, 'inventory_psd.csv')) - -# Print the drift-sensitive components csv contents -print(inventory_psd.head(5)) - -# Load the inventory of acceleration-sensitive components -inventory_pfa =pd.read_csv(os.path.join(inventory_directory, 'inventory_pfa.csv')) - -# Print the acceleration-sensitive components csv contents -print(inventory_pfa.head(5)) - - - - - -# Number of damage realizations per EDP range -rlz = 500 - -# Engineering demand parameter range -psd_range = np.linspace(0.001, 0.5, 100) # interstorey drift in rad -pfa_range = np.linspace(0.001, 5.0, 100) # peak floor acceleration in g - -# Replacement cost value -repCost = 1.0 - -# Currency conversion rate. This is especially useful if the compiled inventory data -# is in a foreign currency and needs to be converted to the local market currency. -conversion_rate = 1.0 - -# Selected regression function. Options include "gpd", "weibull", "papadopoulos", or "lognormal". -# For more information on the input arguments, refer to the documentation in vmtk/slf_generator.py. -regF = 'gpd' - -# Performance grouping flag. Set to True if the user prefers to aggregate all sub-components' SLFs -# into a single performance group (e.g., for drift-sensitive components). -grouping_flag = True - - - - - -# Initialise the slf_generator class -psd_model = slf_generator(inventory_psd, - edp= 'PSD', - edp_range = psd_range, - grouping_flag= grouping_flag, - conversion = conversion_rate, - realizations = rlz, - replacement_cost = repCost, - regression = regF) - -### Generate the SLFs using the "generate()" method -out, cache = psd_model.generate() - - -# Visualise the drift-sensitive nonstructural components -# storey loss function using the "plot_slf_model" -# method from the plotter class - -pl.plot_slf_model(out, - cache, - 'Interstorey Drift Ratio [-]', - output_directory=None, - plot_label='slf') - - - - - -# Initialise the slf_generator class -pfa_model = slf_generator(inventory_pfa, - edp= 'PFA', - edp_range = pfa_range, - grouping_flag= grouping_flag, - conversion = conversion_rate, - realizations = rlz, - replacement_cost = repCost, - regression = regF) - -### Generate the SLFs using the "generate()" method -out, cache = pfa_model.generate() - - -# Visualise the drift-sensitive nonstructural components -# storey loss function using the "plot_slf_model" -# method from the plotter class - -pl.plot_slf_model(out, - cache, - 'Peak Floor Acceleration [g]', - output_directory=None, - plot_label='slf') diff --git a/requirements-py310-linux.txt b/requirements-py310-linux.txt deleted file mode 100644 index 0533ef6..0000000 --- a/requirements-py310-linux.txt +++ /dev/null @@ -1,20 +0,0 @@ -# vmtk requirements -# From OQ wheels -# -https://wheelhouse.openquake.org/v3/linux/py310/statsmodels-0.14.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/numpy-1.23.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/pyproj-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/GDAL-3.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/fiona-1.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/h5py-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/numba-0.58.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py310/llvmlite-0.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -# -# -openseespy==3.7.0.4 -openseespylinux==3.7.0.4 -https://wheelhouse.openquake.org/v3/py/click-8.1.7-py3-none-any.whl -https://wheelhouse.openquake.org/v3/py/pydantic-2.10.6-py3-none-any.whl diff --git a/requirements-py311-linux.txt b/requirements-py311-linux.txt index 3305aa8..d529e89 100644 --- a/requirements-py311-linux.txt +++ b/requirements-py311-linux.txt @@ -1,17 +1,18 @@ # vmtk requirements # From OQ wheels # + +https://wheelhouse.openquake.org/v3/linux/py311/gdal-3.10.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/pyproj-3.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/fiona-1.10.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/h5py-3.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/shapely-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl https://wheelhouse.openquake.org/v3/linux/py311/statsmodels-0.14.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/pyproj-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/GDAL-3.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/fiona-1.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/h5py-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/numba-0.58.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py311/llvmlite-0.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py311/matplotlib-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl # # openseespy==3.7.0.4 diff --git a/requirements-py311-win64.txt b/requirements-py311-win64.txt index e24b4e3..c1e1653 100644 --- a/requirements-py311-win64.txt +++ b/requirements-py311-win64.txt @@ -1,17 +1,17 @@ # vmtk requirements # From OQ wheels # -https://wheelhouse.openquake.org/v3/windows/py311/statsmodels-0.14.4-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/pandas-2.0.3-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/numpy-1.26.2-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/matplotlib-3.8.2-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/scipy-1.11.4-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/fiona-1.9.5-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/GDAL-3.7.3-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/pyproj-3.6.1-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/numba-0.58.1-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/h5py-3.10.0-cp311-cp311-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py311/llvmlite-0.41.1-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/pyproj-3.7.2-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/gdal-3.10.2-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/fiona-1.10.1-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/matplotlib-3.10.1-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/numba-0.61.2-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/numpy-2.2.6-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/shapely-2.1.0-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/llvmlite-0.44.0-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/scipy-1.15.3-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/h5py-3.13.0-cp311-cp311-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py311/pandas-2.2.3-cp311-cp311-win_amd64.whl # # openseespy==3.6.0.3 diff --git a/requirements-py312-linux.txt b/requirements-py312-linux.txt index 517b349..12f9f0f 100644 --- a/requirements-py312-linux.txt +++ b/requirements-py312-linux.txt @@ -2,20 +2,19 @@ # From OQ wheels # https://wheelhouse.openquake.org/v3/linux/py312/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/pyproj-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/fiona-1.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/GDAL-3.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/pyproj-3.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/gdal-3.10.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/fiona-1.10.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/numba-0.61.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/shapely-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +https://wheelhouse.openquake.org/v3/linux/py312/h5py-3.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl https://wheelhouse.openquake.org/v3/linux/py312/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/h5py-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/numba-0.60.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -https://wheelhouse.openquake.org/v3/linux/py312/llvmlite-0.43.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl # # -#https://wheelhouse.openquake.org/v3/py/openseespy-3.6.0.3-py3-none-any.whl -#https://wheelhouse.openquake.org/v3/py/openseespylinux-3.6.0.3-py3-none-any.whl openseespy==3.7.0.4 openseespylinux==3.7.0.4 https://wheelhouse.openquake.org/v3/py/click-8.1.7-py3-none-any.whl diff --git a/requirements-py312-win64.txt b/requirements-py312-win64.txt index 634a009..aaacc6f 100644 --- a/requirements-py312-win64.txt +++ b/requirements-py312-win64.txt @@ -2,20 +2,20 @@ # From OQ wheels # https://wheelhouse.openquake.org/v3/windows/py312/statsmodels-0.14.4-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/fiona-1.9.5-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/GDAL-3.7.3-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/h5py-3.11.0-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/matplotlib-3.8.2-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/numba-0.60.0-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/numpy-1.26.4-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/gdal-3.10.2-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/fiona-1.10.1-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/pyproj-3.7.2-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/matplotlib-3.10.1-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/numba-0.61.2-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/numpy-2.2.6-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/shapely-2.1.0-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/llvmlite-0.44.0-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/contourpy-1.3.2-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/scipy-1.15.3-cp312-cp312-win_amd64.whl +https://wheelhouse.openquake.org/v3/windows/py312/h5py-3.13.0-cp312-cp312-win_amd64.whl https://wheelhouse.openquake.org/v3/windows/py312/pandas-2.2.3-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/pyproj-3.6.1-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/scipy-1.13.1-cp312-cp312-win_amd64.whl -https://wheelhouse.openquake.org/v3/windows/py312/llvmlite-0.43.0-cp312-cp312-win_amd64.whl +#pp # -# -#https://wheelhouse.openquake.org/v3/py/openseespy-3.6.0.3-py3-none-any.whl -#https://wheelhouse.openquake.org/v3/py/openseespywin-3.6.0.3-py3-none-any.whl openseespy==3.7.0.6 openseespywin==3.7.0.6 https://wheelhouse.openquake.org/v3/py/click-8.1.7-py3-none-any.whl