tsunami / setup.py.backup
Gitdeeper4's picture
رفع جميع ملفات TSU-WAVE مع YAML
12834b7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
TSU-WAVE: Tsunami Spectral Understanding of Wave-Amplitude Variance and Energy
A physics-based framework for real-time tsunami analysis and coastal inundation forecasting
"""
import os
import sys
from setuptools import setup, find_packages
from setuptools.command.build_ext import build_ext
import subprocess
import numpy as np
class FortranBuildExt(build_ext):
"""Custom build command to compile Fortran NSWE solver"""
def run(self):
# Compile Fortran code with f2py
fortran_file = os.path.join('src', 'core', 'nswe_solver.f90')
target_dir = os.path.join('src', 'tsuwave', 'core')
os.makedirs(target_dir, exist_ok=True)
# Run f2py to compile Fortran code
cmd = [
'f2py', '-c', fortran_file,
'-m', 'nswe_solver',
'--build-dir', target_dir
]
try:
subprocess.check_call(cmd)
print("✓ NSWE solver compiled successfully")
except subprocess.CalledProcessError as e:
print(f"⚠ Warning: NSWE solver compilation failed: {e}")
print("The package will install but Fortran components won't be available")
except FileNotFoundError:
print("⚠ Warning: f2py not found. Install numpy for Fortran support")
# Continue with normal build
super().run()
# Read requirements
with open('requirements.txt') as f:
requirements = [line.strip() for line in f if line.strip() and not line.startswith('#')]
# Read long description from README
with open('README.md', encoding='utf-8') as f:
long_description = f.read()
setup(
name='tsu-wave',
version='1.0.0',
description='TSU-WAVE: Real-time tsunami analysis and coastal inundation forecasting',
long_description=long_description,
long_description_content_type='text/markdown',
author='Samir Baladi',
author_email='gitdeeper@gmail.com',
maintainer='Samir Baladi',
maintainer_email='gitdeeper@gmail.com',
url='https://gitlab.com/gitdeeper4/tsu-wave',
project_urls={
'Documentation': 'https://tsu-wave.netlify.app/documentation',
'Source': 'https://gitlab.com/gitdeeper4/tsu-wave',
'Tracker': 'https://gitlab.com/gitdeeper4/tsu-wave/-/issues',
'DOI': 'https://doi.org/10.5281/zenodo.XXXXXXXX',
},
license='MIT',
classifiers=[
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Science/Research',
'Intended Audience :: Education',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Fortran',
'Topic :: Scientific/Engineering',
'Topic :: Scientific/Engineering :: Physics',
'Topic :: Scientific/Engineering :: Oceanography',
'Natural Language :: English',
'Operating System :: OS Independent',
],
keywords=[
'tsunami', 'hydrodynamics', 'wave-propagation', 'coastal-inundation',
'early-warning', 'NSWE', 'bathymetry', 'spectral-analysis',
'vorticity', 'oceanography', 'geophysics', 'natural-hazards'
],
python_requires='>=3.10',
install_requires=requirements,
extras_require={
'dev': [
'pytest>=7.4.0',
'pytest-asyncio>=0.21.0',
'pytest-cov>=4.1.0',
'httpx>=0.25.0',
'black>=23.11.0',
'isort>=5.12.0',
'flake8>=6.1.0',
'mypy>=1.7.0',
'mkdocs>=1.5.0',
'mkdocs-material>=9.4.0',
'jupyter>=1.0.0',
],
'docs': [
'mkdocs>=1.5.0',
'mkdocs-material>=9.4.0',
'mkdocstrings>=0.24.0',
],
},
packages=find_packages('src'),
package_dir={'': 'src'},
include_package_data=True,
package_data={
'tsuwave': [
'data/bathymetry/*.nc',
'data/becf_precomputed/*.json',
'data/validation_events/*/*',
'core/*.f90',
],
},
entry_points={
'console_scripts': [
'tsu-wave=tsuwave.cli:main',
'tsu-wave-monitor=tsuwave.cli:monitor',
'tsu-wave-validate=tsuwave.cli:validate',
'tsu-wave-forecast=tsuwave.cli:forecast',
],
},
cmdclass={
'build_ext': FortranBuildExt,
},
zip_safe=False,
# Fortran extension metadata
ext_modules=[
{
'name': 'nswe_solver',
'sources': ['src/core/nswe_solver.f90'],
'language': 'fortran',
}
],
# Include numpy headers for f2py
include_dirs=[np.get_include()],
# Metadata
platforms=['any'],
# Validation data
data_files=[
('share/tsu-wave/bathymetry', ['data/bathymetry/etopo1_pacific.nc']),
('share/tsu-wave/becf_maps', ['data/becf_precomputed/pacific_bays.json']),
],
)
print("\n" + "="*50)
print("TSU-WAVE v1.0.0 installation complete!")
print("="*50)
print("\nDocumentation: https://tsu-wave.netlify.app/documentation")
print("Repository: https://gitlab.com/gitdeeper4/tsu-wave")
print("\nTo verify installation:")
print(" python -c \"import tsuwave; print(tsuwave.__version__)\"")
print("="*50)