Commit Graph

496 Commits

Author SHA1 Message Date
Ian Bell
9b3c127cf4 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>
2025-10-11 09:52:16 -04:00
Ian Bell
1442cdf656 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>
2025-10-11 09:48:20 -04:00
Ian Bell
55004163bd 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>
2025-10-11 09:45:15 -04:00
Ian Bell
11860838b2 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>
2025-10-10 09:36:20 -04:00
Ian Bell
cdefacfb57 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>
2025-10-10 09:26:37 -04:00
Ian Bell
6e6363f7f8 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>
2025-10-10 09:26:37 -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
896e85d129 Add Ideal gas methods (#2626)
* Add ability to get at the ideal-gas properties directly

Also through the python interface

* And python interface files

* Fixes the missing reference to ideal gas notebook
2025-10-04 16:00:30 -04:00
Ian Bell
2bf621c082 And tqdm (#2619) 2025-09-20 12:49:09 -04:00
Jon Finerty
c4140f5973 Disables profiling by default with flag to enable. (#2613)
Fixes issue #2612 by turning off cython profiling in build unless
explicitly set via an environment flag
2025-09-12 21:15:39 -04:00
Ian Bell
1c07b9b426 A more robust fix for #2587 (#2603) 2025-08-23 18:06:29 -04:00
Ian Bell
9b5d31c2c5 Fix #2587: Prevent incorrect splitting of chemical names with commas in get_aliases() (#2600)
Use regex with negative lookbehind to avoid splitting names like '1,2-dichloroethane'
into separate aliases. This fixes the issue where chemical names containing
numbers and commas were being incorrectly split.
2025-08-23 14:20:28 -04:00
Ian Bell
8f84713ecd A couple more long
Must be something new in cython
2025-05-18 15:29:39 -04:00
Ian Bell
c8499a6c34 Fix the failing docs I hope.
Seems long is not a valid identifier anymore
2025-05-18 10:51:59 -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
5bae01a5e9 Use pickle instead of cPickle; deprecation [skip ci] 2025-04-21 18:06:13 -04:00
Ian Bell
4d59587f82 Work on fixing CI git revision in sdist
See #2518
2025-04-10 18:00:38 -04:00
Ian Bell
1f9360ed5c Two more np.nan 2025-04-07 07:30:28 -04:00
Ian Bell
a72baafc77 Add fluid files with superancillary data (#2503)
* Add fluid files with superancillary data

* Delete the large generated z-compressed header
2025-03-22 21:33:18 -04:00
Ian Bell
0a1f13a006 Fix unicode issues with the deprecated State class
Vaguely more sane
Closes #2497
2025-03-16 10:40:30 -04:00
jakobreichert
83a253cf9b Add set_cubic_alpha_C function to python wrapper (#2496) 2025-03-10 13:02:47 -04:00
Ian Bell
747f2b0235 Move to more modern pyproject.toml builds
Backwards compatible with old approach
2025-03-09 12:50:09 -04:00
Ian Bell
dc360fc167 miniz fluids (#2495)
* Ignore depcache files [skip ci]

* Z lib compress the fluid data

And migrate to newer version of miniz

* Add the writing of the .z file

* This works on MSVC, not sure about any other platform

How does one inform the linker about what locations to search for this file?

* Does this give the necessary linking info to the compiler?

* Include the header only for MSVC

* The incbin is still needed for non-windows

* Missing headers for Python

* Add miniz source file

* Missing import

* Provide a solution for compilers that don't support assembly to embed files

* Don't specify standard since we have mixed C/C++

https://stackoverflow.com/questions/49000674/cython-std-c11-error-using-both-c-and-c

* rename miniz to cpp

* And cmake

* Back to .c again

Not sure what to do about Python now

* Build the C library and then link it in

* FIx cmake too

* Location for .z file

* arg to setup function

* Check for z file [skip ci]

* Force build temp to be here

* Try switching to setuptools version

* Force the build_temp to be build before clib construction begins

That was subtle...
2025-03-09 10:38:56 -04:00
Ian Bell
906fdfe2d1 On PYPI project names are soon to be required to be all lowercase (#2489)
Test whether renaming the project in setup.py is enough. Does not impact the package name (CoolProp) that is included in the wheel so user code should not change
2025-03-01 15:45:56 -05:00
Ian Bell
3f885db54f Bump fmtlib to 11.1.3 (#2478)
* Bump fmtlib to 11.1.3

Required addition of unicode support

Add the flag for python wheel builds too
2025-02-23 15:48:28 -05:00
Ian Bell
275581e1ab Move to a more sane option for managing boost archive expansion 2025-01-01 15:07:45 -05:00
Ian Bell
6d23854efe No string in pxd either 2024-12-30 15:27:56 -05:00
Ian Bell
1f428fd935 Try to fix the python 3.13 builds on windows
Remove the string in interface. It seems like the string here should be left untyped to allow auto conversion of strings
2024-12-30 15:21:58 -05:00
MasterGPT9821
233e275b27 Fix Plots of log-p-h diagrams (#2446)
When i tried to plot log(p)-h-diagrams there always had been an issue in the common.py file in line 481. By deleting the "Isoline, self" between the () of super in this line i could fix this an the plots were generated. So i made this pull request.
2024-12-04 14:14:26 -05:00
gitsdfawfevi
a988270be2 Fix np.NaN for numpy >=2 (#2439)
Co-authored-by: gitsdfawfevi <user@server.fake>
2024-11-15 09:44:41 -05:00
Niels Holswilder
fbb2d587bd Python 3.13 and replace distutils with setuptools PEP 632 – Deprecate distutils (#2436)
* Update setup.py replace distutils with setuptools

PEP 632 – Deprecate distutils module.

Edit line 4-6:
from distutils.version import LooseVersion
from distutils.sysconfig import get_config_var
from setuptools.command.build_ext import build_ext
To
from packaging.version import Version
from sysconfig import get_config_var
from setuptools.command.build_ext import build_ext

Edit line 291:
cython_version = Version (Cython.__version__)
To
cython_version = str(Version (Cython.__version__))

Edit line 353:
from distutils.errors import CompileError
To
from setuptools import CompileError

Edit line 394:
from Cython.Distutils.extension import Extension
To
from setuptools.extension import Extension

Delete line 396:
from Cython.Distutils import build_ext
This is now handled with line 6 and thus redundant
from setuptools.command.build_ext import build_ext

Edit line 3, 60, 61 62, 66, 77, 229, and 291
Replace all instances of LooseVersion with Version

* Update python_buildwheels.yml

* Update python_cibuildwheel.yml

* Update setup.py

* Update setup.py

* Update setup.py

* Update python_buildwheels.yml

Added module packaging to the list of dependencies.

* Update python_cibuildwheel.yml

Updated cibuildwheel version form 2.17.0 to latest edition 2.21.3 for python 3.13 support.

* Update python_buildwheels.yml

Deleted lines with python specific exclusions for Windows ARM64 as it already excluded generically.

* Update python_buildwheels.yml

Deleted lines with python specific exclusions for MacOS as these are no longer supported.
2024-11-07 20:45:25 -05:00
Ian Bell
730620f7b1 Expose the neff function 2024-10-03 20:00:15 -04:00
Ian Bell
01b6804a60 Fix source searching in python build
On OSX you get the dreaded .DS_Store files to contend with
2024-08-01 11:25:06 -04:00
Ian Bell
f0258a8d15 Prepare for cython 3.0
There is a bug in cython 3.0 with module-level dicts it seems
2023-08-06 11:56:09 -04:00
Ian Bell
de38f085cb Turn off the shared_ptr hacks 2023-08-06 11:55:05 -04:00
Ian Bell
39b5519ddb Make the AbstractState owned by State class public 2023-08-03 20:23:19 -04:00
Ian Bell
37c18d5006 Allow predefined mixtures to be added at runtime 2023-07-27 10:04:51 -04:00
Ian Bell
1c5f1768e5 Fix copying of State object with mixtures
need to keep phase imposed
2023-07-26 22:43:50 -04:00
Ian Bell
8066bc0a38 Fix two bugs in phase imposition for State class
The string comparison for phase will always fail because comparison is between bytes and str and phase setting should happen before update
2023-07-26 22:43:09 -04:00
Ian Bell
1ac6ee5383 Fix include path for fmtlib 2023-05-13 09:12:15 -04:00
Ian Bell
80c70e70f2 Fix fmtlib include path 2023-05-13 08:20:14 -04:00
Ian Bell
0ef60d9408 Also output the Fluid in State class 2023-02-04 13:29:18 -05:00
Jorrit Wronski
76daa5abe6 Force a native build on Linux instead of 64bit 2022-12-06 23:16:03 +01:00
Ian Bell
256b810f31 Fix constant generation after the clang-format 2022-04-06 10:54:40 -04:00
Julien Marrec
6913fc41dc Format macros, they keep getting picked incrementally by clang format + Strip trailing whitespaces
```
find . -regextype posix-extended -regex '.*\.(cpp|hpp|c|h|cxx|hxx|py)$' | xargs -I@ sed -i 's/[ \t]*$//' "@"
```
2022-04-01 07:39:35 -04:00
Julien Marrec
149a40d88b Add github action to build python wheels (including python 3.9 and 3.10) (#2097)
* Fix build error: `src/Backends/IF97/IF97Backend.h:54:34: error: call of overloaded ‘abs(double)’ is ambiguous`

Found with the manylinux_2_24_x86_64

gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516

* Register MSVC 2019 and 2022 in setup.py

* setup.py: when calling cmake, build in parallel

* Enable using Env variables instead of passing them as args to setup.py

* Github actions for linux: try 1

* use actions/checkout@v3 for submodules

* mod setup.py:; typo

* Random shot for cibuildwheel for all platforms

* I thought package_dir was a flag, but it's positional

* typo in cmake_compiler

* add cython to setup_requires

* try a pryproject.toml to install cython

* try more requirements?

* pywin32 only found on win32 I guess

* Try with CIBW_BEFORE_BUILD instead

* try to enable msvc via vcvarsall on windows, and pass MACOSX_DEPLOYMENT_TARGET

* more tweaks for windoze

* disable tests for now (fails on windows)

* tweak mac again: it seems mac doesn't understand a C++ lambda, so like it's using pre C++11

* tweak

* try 10.15 for mac...

* try to  force C++11 since mac picks up the path where lambdas are used...

* Move back down to 10.9 now that C++11 is enabled and it works on mac, it should be enough

* Try to debug win32

* Enable part of the upload step (minus the upload) to list the wheels

* try to allow win32 to fail for now (instead of plain disabling)

* Disable the python_linux.yml workflow, so cibuildwheels works fine.

* Adjust the upload step to point to the right folder

* make LGTM python happy
2022-03-31 09:26:31 -04:00
Ian Bell
c06d2df794 Fix printing of State class 2021-10-02 15:05:56 -04:00
Ian Bell
64e27b95de Add function set_interaction_parameters 2021-07-27 14:50:09 -04:00
Bryan W. Weber
2ea29cfeaa Fix build on macOS (#2008)
The changes in #1990 require C++11 compiler support. On macOS 10.14 with
XCode 11.3, the -std=c++11 flag must be specified to the compiler.
2021-03-15 21:32:42 -04:00
Jorrit Wronski
7058c3f2df Reset the Python wrapper for PropsSI to a pre 47800331 state, should help with #1941 2020-07-28 16:07:39 +02:00