201 Commits

Author SHA1 Message Date
Ian Bell
d5761cb150 Use ninja for the examples (#2635)
* Use ninja for the examples

Should help a little bit with doc building

* FIx some templates

* Fix template deduction error in count_x_for_y_many functions

The count_x_for_y_many and count_x_for_y_manyC functions were using
a single template parameter for both input (double) and output (size_t)
arrays, causing template deduction failures in Cython bindings.

Changed to use separate template parameters YContainer and CountContainer
to properly support different types for input y values and output counts.

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

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

* Fix types in PXD header too

* Docs should get ninja too

* Changes from clang-format

* Fix git diff argument order in clang-format script

The script was comparing PR_BRANCH to TARGET_BRANCH, which shows changes from the PR branch to the target (what's in target that's NOT in PR). For PR validation, we need the opposite: changes from target to PR (what's in PR that's NOT in target).

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

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

* Fix Cython template deduction errors in solve_for_x_manyC and count_x_for_y_manyC

Add explicit template parameters [double, size_t] to both function calls
to resolve template type deduction errors when compiling with Cython.

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

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

* Fix wheel building by removing return from void Cython template calls

The functions solve_for_x_manyC and count_x_for_y_manyC return void in C++.
When Cython sees a return statement with a void function call containing
template arguments with commas (e.g., [double, size_t]), it wraps the call
in the __Pyx_void_to_None macro. This macro is a simple preprocessor macro
that cannot handle the commas in template arguments, treating them as macro
argument separators instead.

The fix is to remove the return statements, making these simple void function
calls. This prevents the __Pyx_void_to_None wrapping and allows the wheel to
build successfully.

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

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-12 09:28:57 -04:00
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