Commit Graph

200 Commits

Author SHA1 Message Date
Ian Bell
70d03056e0 Modernize Python build system to use scikit-build-core (#2632)
* Modernize Python build system to use scikit-build-core

This commit replaces the old setuptools-based build system with a modern
scikit-build-core + CMake build system for the Python bindings.

Key changes:
- Replace setup.py with pyproject.toml using scikit-build-core backend
- Create new CMakeLists.txt for Cython module compilation
- Add FindCython.cmake helper module
- Update README from .rst to .md format
- Enable incremental builds with proper CMake dependency tracking
- Support Python 3.8-3.14 with proper Cython directives

Benefits:
- Incremental builds work correctly (only rebuild changed files)
- Modern PEP 517/518 compliant build system
- Build artifacts cached in build/{wheel_tag} directories
- Better integration with pip and modern Python tooling
- No more need for custom _py_backend build hooks

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add build-time file generation and ignore generated files

This commit adds the missing build-time steps from setup.py:
- Header generation from JSON files (generate_headers.py)
- Cython constants module generation (generate_constants_module.py)
- Copying headers, fmtlib, and BibTeX file to package directory

Also updates .gitignore to ignore:
- wrappers/Python/CoolProp/include/ (generated during build)
- wrappers/Python/CoolProp/CoolPropBibTeXLibrary.bib (copied during build)

Includes test script to verify wheel contents match between old and new build approaches.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Set CMAKE_POSITION_INDEPENDENT_CODE for shared library build

Enable -fPIC flag for all targets to ensure proper shared library compilation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove deprecated buildbot configuration

The buildbot system is deprecated and no longer in use.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update extract_version.py to use .version file instead of setup.py

With the migration to scikit-build-core, version information is now stored
in the .version file and read by pyproject.toml. Updated the script to:

- Rename replace_setup_py() to replace_version_file()
- Update .version file instead of modifying setup.py
- Change --replace-setup-py flag to --replace-version

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update build scripts and documentation for scikit-build-core

Changes:
- Updated documentation to show modern pip-based installation
- Updated manylinux build script to use pip wheel instead of setup.py
- Updated conda metadata generator to use pip install
- Removed deprecated PyPI preparation script (replaced by `python -m build --sdist`)

All build infrastructure now uses the new scikit-build-core build system.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update manylinux Docker script for scikit-build-core

Removed SETUP_PY_ARGS since cmake options are no longer passed via
setup.py arguments. The new build system uses CMake directly via
scikit-build-core. Also fixed typo and updated install_root path.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove deprecated _py_backend custom build backend

The _py_backend was a custom setuptools build backend wrapper used
with the old setup.py build system. It's no longer needed with
scikit-build-core.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add uv package manager documentation

Added section on using uv (Astral's fast Python package manager) to
install and work with CoolProp. Includes examples for:
- Installing in current environment
- Creating new projects with CoolProp
- Running scripts with automatic environment management
- Development installations from source

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix sdist packaging and update scikit-build-core config

Changes:
- Updated pyproject.toml to use newer scikit-build-core config syntax
  - cmake.minimum-version → cmake.version
  - cmake.verbose → build.verbose
- Added sdist.include to ensure .version file is in source distributions
- Added .version to MANIFEST.in for completeness

This fixes the issue where building a wheel from an sdist would fail
due to missing .version file. Now sdist → wheel builds work correctly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Rename setup.py to deprecated_setup.py

The old setuptools-based build system has been fully replaced with
scikit-build-core. Renaming setup.py to deprecated_setup.py to:
- Clearly indicate it's no longer the primary build method
- Keep it available for reference and backward compatibility
- Prevent accidental use of the old build system

Users should now use: pip install .

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update GitHub Actions workflows for new build system

Changes:
- Replace --replace-setup-py with --replace-version flag
- Update sdist build to use 'python -m build --sdist' instead of deprecated prepare_pypi.py
- Workflows now work with scikit-build-core build system

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix cibuildwheel to build from repository root

With scikit-build-core, the pyproject.toml is at the repository root,
not in wrappers/Python/. Updated cibuildwheel configuration:
- Changed package-dir from ./wrappers/Python/ to .
- Removed redundant CIBW_BEFORE_BUILD (dependencies are in pyproject.toml)
- Build dependencies are now automatically installed by pip from pyproject.toml

This fixes the "Multiple top-level packages discovered" error.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Set macOS deployment target to 11.0 in pyproject.toml

Configure MACOSX_DEPLOYMENT_TARGET=11.0 (Big Sur) in cibuildwheel config.
This matches the setting in GitHub Actions and ensures wheels are built
with consistent compatibility for macOS 11.0 and later.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove old pyproject.toml from wrappers/Python

This file was used by the old setuptools build system. With
scikit-build-core, the main pyproject.toml at the repository root
is now used for all Python packaging configuration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove redundant PyPy skip selector from cibuildwheel

The 'pp*' skip selector was causing a warning because PyPy isn't enabled
in the build matrix anyway. Since we explicitly specify only CPython
versions in the build directive (cp38-*, cp39-*, etc.), the pp* skip is
unnecessary.

Fixes warning: "Invalid skip selector: 'pp*'. This selector matches a
group that wasn't enabled."

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update fmtlib from 11.1.3 to 12.0.0

Updated the fmtlib submodule to the latest stable release (12.0.0).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove pdsim

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-11 13:07:10 -04:00
Ian Bell
238ca71e48 Python 3.14 support? (#2630)
* Python 3.14 support?

* Don't need explicit skip for pypy

* Explicit 3.14

* wrong python for pip?

* Another pyproject.toml to fix deps?
2025-10-10 08:59:01 -04:00
Ian Bell
9adc24b60d try to get Inno into the image (#2628)
Dropped in Windows server 2025 image; see https://github.com/actions/runner-images/issues/12464
2025-10-04 15:59:27 -04:00
Ian Bell
2bf621c082 And tqdm (#2619) 2025-09-20 12:49:09 -04:00
Ian Bell
58b3dcdebb Fix git revision handling in docs workflow (#2604)
1. Fetch full git history during checkout for accurate revision info
2. Set up git config earlier in the process
3. Call generate_headers.py explicitly to ensure gitrevision.h is generated
4. Remove duplicate git config
2025-09-05 20:00:45 -04:00
Ian Bell
18a4b7dad9 Pin the version of the emsdk for js 2025-08-14 19:57:31 -04:00
Ian Bell
ea1c481dba Don't depend on failure 2025-08-08 19:25:55 -04:00
Ian Bell
ec72f98437 Ctest seems to be the problem somehow 2025-08-08 19:01:00 -04:00
Ian Bell
c574c8c966 Run tests single-threaded 2025-08-08 18:42:36 -04:00
Ian Bell
4eaafd4c86 v5 doesn't exist (yet) 2025-07-04 08:36:34 -04:00
Ian Bell
b1c666c7a2 Fire devdocs on commits to main/master
Closes #2570
2025-07-04 08:35:45 -04:00
Ian Bell
e561faa531 Switch to pydata theme (#2562) 2025-06-27 11:06:23 -04:00
Ian Bell
638b6a86df Fix passed variable name? 2025-05-23 08:39:25 -04:00
Ian Bell
0708ca97de More debugging, please and thank you 2025-05-23 08:25:41 -04:00
Ian Bell
409626463d Pass through as input? 2025-05-22 21:10:35 -04:00
Ian Bell
cfdfcbf84c Try to fix the version mess for test pypi again
confidence levels are low
2025-05-22 21:03:00 -04:00
Ian Bell
fb338af504 Yet another try with git permissions 2025-05-17 21:19:26 -04:00
Ian Bell
0ba87db0d9 Another try with permissions
I hate debugging CI
2025-05-17 21:00:13 -04:00
Ian Bell
9372694d10 Turn back off user and group, that was a bug 2025-05-17 20:42:49 -04:00
Ian Bell
c216150594 Update docs_docker-run.yml
Maybe adding the groups helps? It used to work
2025-05-17 20:36:55 -04:00
Ian Bell
267d64533a Superancillaries for pure fluids (#2511)
* Expansions are fully wrapped, looking good. Next step is the set of expansions that is the 1D approximation

* Get 1D approx working via cython

* Count solutions

* SuperAncillary class is working

>1000x speedup for water
Time for C++!

* Superancillaries are working!

In C++, speedup is more than 2000x. In Python, more like 150x because of Python <-> C++ overhead

* Add pmax check for PQ superancillary calls

* Update tests

* Allow T limits to be obtained

* Implement get_fluid_parameter_double for getting superanc value

* Add tests for getting parameters from superanc

* Script for testing superancillaries for sphinx

* Microoptimizations; don't help speed

The limiting factor remains the clear function, which takes about 30 ns

* Add R125 superancillary

* Use the release from fastchebpure for the files

* Drop a .gitignore in the unzipped folder

* Update superancillary injection script

* Turn on superancillaries by default

* Missing header

* Many int conversions in superancillary

* Another int cast

* More annoying solution for boost iter max

* Fix warnings

* One more warning

* Clear up the calculation of rho

* Update docs_docker-build.yml

Use arm64 since the containers were built on mac

* Superfluous ;

* Update backend.py

* Get the critical points working for superancillaries

* Fix wrapping changes of xmin&xmax methods

* squelch warnings

* Version 0 of jupyter notebook for docs

* Try to add the notebook to the docs

* Add jupyter notebook for superancillary

* Lots of updates to superancillary notebook

* More updates to docs

* Skip pseudo-pure for superancillary docs

* Fix output of superancillary figures

* Add superancillary plots to docs for the page for each fluid

* Make a placeholder figure for fluids without superancillary

* Add superancillary plots to task list

* Bump to release fixing m-xylene

* Relax the location of the REFPROP stuff

* Change default name for R-1336mzz(E)

* No need for figures to be so large

* Don't need REFPROP setting

* Bump to fastchebpure release with methanol

* Benchmark caching options

* Benchmark more granularly

* Add the fast methods to public API for HEOS class

* Back to memset - can memset with 0 but no other value

* Fix how caching is managed in Helmholtz class

* Close to final implementation

Perhaps a tiny bit more optimization possible?

* Update function name

* Make message more accurate

* Fix init order

* Expose update_QT_pure_superanc to Python

* Fix when _reducing is set for pures

* Fix the post_update

* Indent

* Notebook

* Notebook

* Make ln(p) construction lazy

Only really matters for debug builds

* Also make reference non-const

* Inject superancillary for methanol

* Make the superancillary loading entirely lazy in debug

* Fix PH bug for Nitrogen

 Closes #2470

* Force the clear to be called on SatL and SatV

To invalidate them at start

* Default is non-lazy superancillary loading

* Add CMake option to have lazy-loading superancillaries [skip ci]

Not a good idea unless doing very narrow testing
2025-05-17 20:27:19 -04:00
Ian Bell
319abc1629 Modernize (and test!) embind wrapping for Javascript (#2551)
* Modernization of the embind wrapping

* Try a newer node, worked on windows?
2025-05-08 21:10:49 -04:00
Ian Bell
d85387e654 Add REFPROP for ASAN 2025-05-07 22:26:02 -04:00
Ian Bell
82158450df Update dev_asan.yml 2025-05-07 22:16:25 -04:00
Ian Bell
8ba223e8b6 Add yml file to use tmate to debug containers on actions 2025-05-07 22:07:20 -04:00
Ian Bell
c5b90c7d87 Update dev_asan.yml 2025-05-07 21:39:08 -04:00
Ian Bell
366f12144c Update dev_asan.yml 2025-05-07 20:56:14 -04:00
Ian Bell
4e7623a072 Update dev_asan.yml adding homebrew 2025-05-07 20:44:49 -04:00
Ian Bell
65aed63ed6 Update dev_asan.yml
Wrong default branch
2025-05-07 20:34:01 -04:00
Ian Bell
55cc3b446a Add an action to run asan (#2548) 2025-05-07 20:17:57 -04:00
Ian Bell
16ac6b3e45 Try to fix caching for incompressible things 2025-04-21 14:16:21 -04:00
Ian Bell
c2f8453fab Memory needs to be a multiple of 64 KiB
Add correct permissions
2025-04-21 12:42:16 -04:00
Ian Bell
6077e2acaa Need the requests first 2025-04-11 12:01:27 -04:00
Ian Bell
99be7d431f Also rename the sources 2025-04-11 07:49:28 -04:00
Ian Bell
d6430b9d8c CIBW args are weird 2025-04-10 22:03:56 -04:00
Ian Bell
0ea724d88f Shared libraries are not built in containers, fix not needed 2025-04-10 21:46:51 -04:00
Ian Bell
f0d90a73b1 Try a more elegant solution for python 2025-04-10 21:46:36 -04:00
Ian Bell
2d69d305c0 Anything in a container should be run with --user 1001 to avoid permissions issues it seems
See https://github.com/actions/runner/issues/2033#issuecomment-1598547465
2025-04-10 21:45:45 -04:00
Ian Bell
0d68ee8a67 Try a different workaround for git revision issue 2025-04-10 21:27:46 -04:00
Ian Bell
99cb597241 wheels are at top level with pip wheel 2025-04-10 20:34:41 -04:00
Ian Bell
1512845043 Sanitize paths for wheel builds in actions 2025-04-10 19:56:10 -04:00
Ian Bell
8a70a86f73 Another check 2025-04-10 19:34:28 -04:00
Ian Bell
7b557306b2 Update some actions to disable some permissions checks 2025-04-10 19:34:05 -04:00
Ian Bell
f1062f6285 Check that git revision is not placeholder in wheels
see #2531
2025-04-10 19:30:40 -04:00
Ian Bell
1abb9601d6 Bump some checkouts to newer versions
Might help to fix issues like those in https://github.com/actions/checkout/issues/1048
2025-04-10 19:26:42 -04:00
Ian Bell
c98d89d25f Try to fix git revision for doc builds 2025-04-10 19:03:00 -04:00
Ian Bell
28a54755e3 --verbose - why are the wheels not uploading? 2025-04-07 22:02:51 -04:00
Ian Bell
3ba3828f41 Patching cloud_sptheme now handled in docker build 2025-04-07 17:03:42 -04:00
Ian Bell
5aae3ec5c2 Perhaps this will fix the paths 2025-04-06 18:57:37 -04:00
Ian Bell
fb4415c707 Fix paths for REFPROP test 2025-04-06 18:50:07 -04:00