Skip to content

Commit

Permalink
BLD: Add pyproject.toml (#241)
Browse files Browse the repository at this point in the history
* BLD: Initial try at pyproject.toml

I think I got every key from setup.py.
The main difference is if the READTHEDOCS environment variable is set: I don't know how to change the dependencies based on that.

On the other hand, given 3.8 is close to or past EOL, I suspect 3.3 is relatively uncommon, and the RTD install, without the unneeded bits, could be accomplished with pip install --no-deps.

* BLD,BUG: Fix pyproject.toml configuration and remove setup.py duplicates.

numpy.distutils recommends setuptools<60, but that breaks pyproject.toml
configuration.  I like this way better.  Still needs setup.py for the
fortran module and for the Cheyenne configuration.

* FIX: Require a setuptools version that understands the configuration.

setuptools<60 just gets confused, and has no idea what the project name is.
I just inverted that requirement: not sure if setuptools needs to be more recent still.

* BLD: Quote version requirement.

* BLD: Specify dependencies in pyproject.toml only.

Remove requirements.txt.

* DOC: Don't install dependencies on RTD

The old setup script replaced the dependencies listed in requirements.txt with mock if python was old enough and nothing if python was recent.

The package no longer supports python versions that old (<3.3), so installing without dependencies is likely the correct way to handle the RTD configuration.

* BLD,BUG: Remove references to requirements, not just definitions

Forgot to remove this two or three commits back.

* BLD: Let's see if NumPy < 2.0 fixes the error

* BLD: Pin setuptools<60

NumPy suggested it, it might help with the distutils failure.

* BLD: Pin setuptools<71

Let's see if that change is the one that broke things.

* BLD: Add subroutines to f90 modules so f2py adds code for them.

If it's just constants used somewhere, f2py drops the module.

* BLD: Remove build-time setuptools pin.

* BLD: Pin setuptools<70 to get msvccompiler

* BLD: Add -fopenmp to LDFLAGS

Let's see if this gets Linux compiles working.

---------

Co-authored-by: Katelyn FitzGerald <[email protected]>
  • Loading branch information
DWesl and kafitzgerald authored Oct 7, 2024
1 parent 302bd5f commit fc2bc17
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 73 deletions.
2 changes: 1 addition & 1 deletion .readthedocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ build:
python: "mambaforge-4.10"
jobs:
post_create_environment:
- python -m pip install --no-cache-dir .
- python -m pip install --no-cache-dir --no-deps .

# Build documentation in the docs/ directory with Sphinx
sphinx:
Expand Down
1 change: 0 additions & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
include README.md
include LICENSE
include requirements.txt

include fortran/*.f90
include fortran/*.pyf
Expand Down
1 change: 1 addition & 0 deletions build_scripts/gnu_omp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ $FC -E ompgen.F90 -fopenmp -cpp -o omp.f90
cd ..

python setup.py clean --all
export LDFLAGS=" -fopenmp "
python setup.py config_fc --f90flags="-mtune=generic -fopenmp" build_ext --libraries="gomp" build
pip install .

3 changes: 3 additions & 0 deletions fortran/omp.f90
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ MODULE omp_constants
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_dynamic = 2
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_guided = 3
INTEGER(KIND=fomp_sched_kind), PARAMETER :: fomp_sched_auto = 4
contains
subroutine have_omp_constants()
end subroutine have_omp_constants
END MODULE omp_constants


Expand Down
4 changes: 4 additions & 0 deletions fortran/ompgen.F90
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ MODULE omp_constants
INTEGER(KIND=4), PARAMETER :: fomp_sched_auto = 4
#endif

contains
subroutine have_omp_constants()
end subroutine have_omp_constants

END MODULE omp_constants


Expand Down
4 changes: 4 additions & 0 deletions fortran/ompgen.F90.template
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ MODULE omp_constants
INTEGER(KIND=4), PARAMETER :: fomp_sched_auto = 4
#endif

contains
subroutine have_omp_constants()
end subroutine have_omp_constants

END MODULE omp_constants


Expand Down
3 changes: 3 additions & 0 deletions fortran/wrf_constants.f90
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ MODULE wrf_constants
REAL(KIND=8), PARAMETER :: EXPON = RD*USSALR/G
REAL(KIND=8), PARAMETER :: EXPONI = 1./EXPON

contains
subroutine have_wrf_constants()
end subroutine have_wrf_constants

END MODULE wrf_constants

61 changes: 61 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
[build-system]
requires = ["setuptools>=61, <70", "numpy"]
build-backend = "setuptools.build_meta"

[project]
name = "wrf-python"
authors = [
{ name = "Bill Ladwig" }
]
maintainers = [
{ name = "GeoCAT", email = "[email protected]" },
]
description = "Diagnostic and interpolation routines for WRF-ARW data."
readme = "README.md"
requires-python = ">=3.7, <3.12"
keywords = [
"python", "wrf-python", "wrf", "forecast", "model",
"weather research and forecasting", "interpolation",
"plotting", "plots", "meteorology", "nwp",
"numerical weather prediction", "diagnostic",
"science", "numpy"
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Science/Research",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Fortran",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Topic :: Scientific/Engineering :: Atmospheric Science",
"Topic :: Software Development",
"Operating System :: POSIX",
"Operating System :: Unix",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows"
]
license = { text = "Apache-2.0" }
dynamic = [ "version" ]
dependencies = [
"basemap",
"numpy >=1.11, !=1.24.3",
"setuptools",
"wrapt",
"xarray"
]

[project.urls]
Repository = "https://github.com/NCAR/wrf-python"
Documentation = "https://wrf-python.rtfd.org"

[tool.setuptools]
package-data = { "wrf" = ["data/psadilookup.dat"]}
platforms = ["any"]

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.dynamic]
version = { attr = "wrf.version.__version__" }
5 changes: 0 additions & 5 deletions requirements.txt

This file was deleted.

66 changes: 0 additions & 66 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,7 @@
import os
import sys
import setuptools
import socket

# Bootstrap a numpy installation before trying to import it.
import importlib
try:
numpy_module = importlib.util.find_spec('numpy')
if numpy_module is None:
raise ModuleNotFoundError
except (ImportError, ModuleNotFoundError):
import subprocess
subprocess.call([sys.executable, '-m', 'pip', 'install', 'numpy'])

if not socket.gethostname().startswith("cheyenne"):
import numpy.distutils.core
else:
Expand Down Expand Up @@ -53,70 +42,15 @@
"fortran/omp.f90"]
)

#Note: __version__ will be set in the version.py script loaded below
__version__ = None
with open("src/wrf/version.py") as f:
exec(f.read())

on_rtd = os.environ.get("READTHEDOCS", None) == "True"
# on_rtd=True
if on_rtd:
if sys.version_info < (3, 3):
requirements = ["mock"] # for python2 and python < 3.3
else:
requirements = [] # for >= python3.3
ext_modules = []

else:
# Place install_requires into the text file "requirements.txt"
with open("requirements.txt") as f2:
requirements = f2.read().strip().splitlines()

# if sys.version_info < (3,3):
# requirements.append("mock")
ext_modules = [ext1]

numpy.distutils.core.setup(
name='wrf-python',
author="Bill Ladwig",
maintainer="GeoCAT",
maintainer_email="[email protected]",
description="Diagnostic and interpolation routines for WRF-ARW data.",
long_description=("A collection of diagnostic and interpolation "
"routines to be used with WRF-ARW data.\n\n"
"GitHub Repository:\n\n"
"https://github.com/NCAR/wrf-python\n\n"
"Documentation:\n\n"
"https://wrf-python.rtfd.org\n"),
url="https://github.com/NCAR/wrf-python",
version=__version__,
package_dir={"": "src"},
keywords=["python", "wrf-python", "wrf", "forecast", "model",
"weather research and forecasting", "interpolation",
"plotting", "plots", "meteorology", "nwp",
"numerical weather prediction", "diagnostic",
"science", "numpy"],
python_requires='>=3.9, <3.12',
install_requires=requirements,
classifiers=["Development Status :: 5 - Production/Stable",
"Intended Audience :: Science/Research",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Fortran",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Topic :: Scientific/Engineering :: Atmospheric Science",
"Topic :: Software Development",
"Operating System :: POSIX",
"Operating System :: Unix",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows"],
platforms=["any"],
license="Apache License 2.0",
packages=setuptools.find_packages("src"),
ext_modules=ext_modules,
download_url="https://python.org/pypi/wrf-python",
package_data={"wrf": ["data/psadilookup.dat"]},
scripts=[]
)

0 comments on commit fc2bc17

Please sign in to comment.