Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ cython_test.cpp
symengine/lib/symengine_wrapper.cpp
symengine/lib/symengine_wrapper.pyx
symengine/lib/symengine_wrapper.pxd
symengine/_version.py

# Config Files
symengine/lib/config.pxi
Expand All @@ -33,6 +34,12 @@ MANIFEST
dist/
.*cache/
symengine.egg-info/
.cmake/
.ninja_deps
.ninja_log
.skbuild-info.json
CMakeInit.txt
symengine/lib/symengine_wrapper.cpp.dep

# Temp files
*~
Expand Down
36 changes: 23 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8.12...4.0.0)
cmake_minimum_required(VERSION 3.21...4.0.0)

if (POLICY CMP0057)
cmake_policy(SET CMP0057 NEW) # needed for llvm >= 16
Expand All @@ -7,7 +7,7 @@ if (POLICY CMP0074)
cmake_policy(SET CMP0074 NEW) # allow user to set *_ROOT variables
endif()

project(python_wrapper)
project(${SKBUILD_PROJECT_NAME} LANGUAGES C CXX)

set(CMAKE_PREFIX_PATH ${SymEngine_DIR} ${CMAKE_PREFIX_PATH})

Expand All @@ -21,13 +21,28 @@ set(CMAKE_BUILD_TYPE ${SYMENGINE_BUILD_TYPE})
set(CMAKE_CXX_FLAGS_RELEASE ${SYMENGINE_CXX_FLAGS_RELEASE})
set(CMAKE_CXX_FLAGS_DEBUG ${SYMENGINE_CXX_FLAGS_DEBUG})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SYMENGINE_CXX_FLAGS}")
include_directories(${SYMENGINE_INCLUDE_DIRS})

set(WITH_PY_LIMITED_API OFF CACHE STRING "Use CPython's limited API")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
find_package(Python REQUIRED)
find_package(Cython REQUIRED)
include_directories(${PYTHON_INCLUDE_PATH})
find_package(
Python
COMPONENTS
Interpreter
Development.Module
${SKBUILD_SABI_COMPONENT}
REQUIRED
)

if ("${SKBUILD_SABI_VERSION}" STREQUAL "")
set(CYTHON_MIN "0.29")
else()
set(CYTHON_MIN "3.1")
endif()

find_package(Cython ${CYTHON_MIN} MODULE REQUIRED)
include(UseCython)

if ("${CYTHON_VERSION}" VERSION_LESS "${CYTHON_MIN}")
message(FATAL_ERROR "Cython version found: ${CYTHON_VERSION}. Minimum required: ${CYTHON_MIN}")
endif()

if (MINGW AND ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8"))
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DMS_WIN64")
Expand Down Expand Up @@ -56,7 +71,6 @@ foreach (PKG MPC MPFR PIRANHA FLINT LLVM)
set(HAVE_SYMENGINE_${PKG} False)
endif()
endforeach()
option(SYMENGINE_INSTALL_PY_FILES "Install python files" ON)

message("CMAKE_SYSTEM_PROCESSOR : ${CMAKE_SYSTEM_PROCESSOR}")
message("CMAKE_BUILD_TYPE : ${CMAKE_BUILD_TYPE}")
Expand All @@ -69,9 +83,5 @@ message("HAVE_SYMENGINE_PIRANHA : ${HAVE_SYMENGINE_PIRANHA}")
message("HAVE_SYMENGINE_FLINT : ${HAVE_SYMENGINE_FLINT}")
message("HAVE_SYMENGINE_LLVM : ${HAVE_SYMENGINE_LLVM}")
message("HAVE_SYMENGINE_LLVM_LONG_DOUBLE : ${HAVE_SYMENGINE_LLVM_LONG_DOUBLE}")
message("SYMENGINE_COPY_EXTENSION : ${SYMENGINE_COPY_EXTENSION}")

message("Copying source of python wrappers into: ${CMAKE_CURRENT_BINARY_DIR}")
file(COPY symengine/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/symengine)

add_subdirectory(symengine)
37 changes: 19 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,14 @@ conda install python-symengine -c conda-forge
Install prerequisites.

```bash
CMake >= 2.8.12
Python3 >= 3.8
Cython >= 0.29.24
SymEngine >= 0.7.0
CMake >= 3.21
Python3 >= 3.9
SymEngine >= 0.14.0
pip
setuptools_scm # will be automatically downloaded by pip
scikit-build-core # will be automatically downloaded by pip
cython >= 0.29.24 # will be automatically downloaded by pip
cython-cmake # will be automatically downloaded by pip
```

For **SymEngine**, only a specific commit/tag (see `symengine_version.txt`) is
Expand All @@ -40,25 +44,22 @@ changes in **SymEngine**.
Python wrappers can be installed by,

```bash
python setup.py install
pip install . -vv
```

Additional options to `setup.py` are:

If you are building SymEngine for development, you should implement
the dependencies automatically installed by pip and do,
```bash
python setup.py install build_ext
--symengine-dir=/path/to/symengine/install/dir # Path to SymEngine install directory or build directory
--compiler=mingw32|msvc|cygwin # Select the compiler for Windows
--generator=cmake-generator # CMake Generator
--build-type=Release|Debug # Set build-type for multi-configuration generators like MSVC
--define="var1=value1;var2=value2" # Give options to CMake
--inplace # Build the extension in source tree
pip install -e . -vv --no-build-isolation
```

Standard options to `setup.py` like `--user`, `--prefix` can be used to
configure install location. NumPy is used if found by default, if you wish
to make your choice of NumPy use explicit: then add
e.g. `WITH_NUMPY=False` to `--define`.
A few additional options to scikit-build-core are mentioned here:

```bash
pip install -e . -vv --no-build-isolation
-Ccmake.build-type=Release|Debug # Set build-type for multi-configuration generators like MSVC
-Ccmake.define.SymEngine_DIR=/path/to/symengine/install/dir # Path to SymEngine install directory or build directory
```

### Notes on Dependencies

Expand Down
73 changes: 19 additions & 54 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,6 @@ environment:
PYTHON_VERSION: 311-x64
WITH_NUMPY: no
CONDA_INSTALL_LOCN: C:\\Miniconda38-x64
#- BUILD_TYPE: "Debug"
# COMPILER: MinGW-w64
# PYTHON_VERSION: 39-x64
# WITH_NUMPY: no
#- BUILD_TYPE: "Release"
# COMPILER: MinGW-w64
# PYTHON_VERSION: 39-x64
#- BUILD_TYPE: "Debug"
# COMPILER: MinGW-w64
# PYTHON_VERSION: 39-x64
# WITH_SYMPY: no
- BUILD_TYPE: "Release"
COMPILER: MSVC15
PLATFORM: "x64"
Expand All @@ -63,41 +52,23 @@ install:
- git clone https://github.com/sympy/symengine symengine-cpp
- if [%PLATFORM%]==[Win32] set "CONDA_SUBDIR=win-32"

- if [%COMPILER%]==[MSVC15] call %CONDA_INSTALL_LOCN%\Scripts\activate.bat
- if [%COMPILER%]==[MSVC15] set "CONDA_DEPS=mpir=3.0.0 vc=14"
- if [%COMPILER%]==[MSVC15] if [%WITH_MPFR%]==[yes] set "CONDA_DEPS=%CONDA_DEPS% mpfr=3.1.5"
- if [%COMPILER%]==[MSVC15] if [%WITH_MPC%]==[yes] set "CONDA_DEPS=%CONDA_DEPS% mpc=1.0.3"
- if [%COMPILER%]==[MSVC15] if [%WITH_LLVM%]==[yes] set "CONDA_DEPS=%CONDA_DEPS% llvmdev=4.0"
- if [%COMPILER%]==[MSVC15] set "CONDA_DEPS=%CONDA_DEPS% -c conda-forge"
- if [%COMPILER%]==[MSVC15] if [%BUILD_TYPE%]==[Debug] set "CONDA_DEPS=%CONDA_DEPS% -c symengine/label/debug"
- if [%COMPILER%]==[MSVC15] conda create -n deps --yes %CONDA_DEPS%
- if [%COMPILER%]==[MSVC15] call conda activate deps
- if [%COMPILER%]==[MSVC15] echo %CONDA_PREFIX%
- if [%COMPILER%]==[MSVC15] echo %PATH%
- if [%COMPILER%]==[MSVC15] set "PATH=%PATH%;%CONDA_PREFIX%\\Library\\bin;%CONDA_PREFIX%"
- if [%COMPILER%]==[MSVC15] echo %PATH%

- if [%COMPILER%]==[MinGW] set "PATH=C:\MinGW\bin;%PATH%"
- if [%COMPILER%]==[MinGW] mingw-get update
# workaround for https://github.com/appveyor/ci/issues/996
- if [%COMPILER%]==[MinGW] mingw-get upgrade mingw32-libstdc++
- if [%COMPILER%]==[MinGW] mingw-get install mingw32-gmp

- if [%COMPILER%]==[MinGW-w64] set "PATH=C:\mingw64\bin;%PATH%"

- rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe"

- if [%COMPILER%]==[MinGW-w64] call symengine-cpp\bin\appveyor-download.cmd "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/x86_64-4.9.1-release-posix-seh-rt_v3-rev1.7z" -FileName mw64.7z
- if [%COMPILER%]==[MinGW-w64] 7z x -oC:\ mw64.7z > NUL
- if [%COMPILER%]==[MinGW-w64] call symengine-cpp\bin\appveyor-download.cmd "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/gmp-6.0.0-x86_64-w64-mingw32.7z" -FileName gmp.7z
- if [%COMPILER%]==[MinGW-w64] 7z x -oC:\mingw64 gmp.7z > NUL

- if NOT [%COMPILER%]==[MSVC15] call symengine-cpp\bin\appveyor-download.cmd "https://raw.githubusercontent.com/symengine/dependencies/dcc10cce2133e2b57e61c5ced6120139bbcdfa20/python-libs-mingw32.7z" -FileName pylibs.7z
- if NOT [%COMPILER%]==[MSVC15] 7z x -aoa -oC:\ pylibs.7z > NUL
- call %CONDA_INSTALL_LOCN%\Scripts\activate.bat
- set "CONDA_DEPS=mpir=3.0.0 vc=14"
- if [%WITH_MPFR%]==[yes] set "CONDA_DEPS=%CONDA_DEPS% mpfr=3.1.5"
- if [%WITH_MPC%]==[yes] set "CONDA_DEPS=%CONDA_DEPS% mpc=1.0.3"
- if [%WITH_LLVM%]==[yes] set "CONDA_DEPS=%CONDA_DEPS% llvmdev=4.0"
- set "CONDA_DEPS=%CONDA_DEPS% -c conda-forge"
- if [%BUILD_TYPE%]==[Debug] set "CONDA_DEPS=%CONDA_DEPS% -c symengine/label/debug"
- conda create -n deps --yes %CONDA_DEPS%
- call conda activate deps
- echo %CONDA_PREFIX%
- echo %PATH%
- set "PATH=%PATH%;%CONDA_PREFIX%\\Library\\bin;%CONDA_PREFIX%"
- echo %PATH%

- set "PATH=C:\Python%PYTHON_VERSION%;C:\Python%PYTHON_VERSION%\Scripts;%PATH%"
- echo %PATH%
- pip install nose pytest cython setuptools
- pip install pytest cython scikit-build-core cython-cmake setuptools_scm
- if NOT [%WITH_NUMPY%]==[no] pip install numpy
- if NOT [%WITH_SYMPY%]==[no] pip install sympy

Expand All @@ -107,14 +78,10 @@ install:
- mkdir build
- cd build

- if [%COMPILER%]==[MSVC15] set "CMAKE_GENERATOR=Visual Studio 16 2019"
- if [%COMPILER%]==[MSVC15] set "CMAKE_GENERATOR_PLATFORM=%PLATFORM%"
- if [%COMPILER%]==[MinGW] set "CMAKE_GENERATOR=MinGW Makefiles"
- if [%COMPILER%]==[MinGW-w64] set "CMAKE_GENERATOR=MinGW Makefiles"
- set "CMAKE_GENERATOR=Visual Studio 16 2019"
- set "CMAKE_GENERATOR_PLATFORM=%PLATFORM%"

- if [%COMPILER%]==[MSVC15] set "CMAKE_ARGS=-DCMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library"
- if [%COMPILER%]==[MinGW] set "CMAKE_ARGS=-DCMAKE_PREFIX_PATH=C:\MinGW -DCMAKE_BUILD_TYPE=%BUILD_TYPE%"
- if [%COMPILER%]==[MinGW-w64] set "CMAKE_ARGS=-DCMAKE_PREFIX_PATH=C:\mingw64 -DCMAKE_BUILD_TYPE=%BUILD_TYPE%"
- set "CMAKE_ARGS=-DCMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library"

- if [%WITH_MPFR%]==[yes] set "CMAKE_ARGS=%CMAKE_ARGS% -DWITH_MPFR=yes"
- if [%WITH_MPC%]==[yes] set "CMAKE_ARGS=%CMAKE_ARGS% -DWITH_MPC=yes"
Expand All @@ -130,12 +97,10 @@ build_script:
- set "PATH=C:\symengine\bin\;%PATH%"
- set "SYMENGINE_PY_ADD_PATH_TO_SEARCH_DIRS=1"
- echo %PATH%
- if [%COMPILER%]==[MSVC15] python setup.py install build_ext --compiler=msvc --build-type=%BUILD_TYPE%
- if [%COMPILER%]==[MinGW] python setup.py install build_ext --compiler=mingw --inplace
- if [%COMPILER%]==[MinGW-w64] python setup.py install build_ext --compiler=mingw --inplace
- set "CMAKE_ARGS="
- python -m pip install -e . --no-build-isolation -Ccmake.build-type=%BUILD_TYPE% -vv

test_script:
- if not [%COMPILER%]==[MSVC15] nosetests
- mkdir empty && cd empty
- python %PYTHON_SOURCE_DIR%\bin\test_python.py

Expand Down
4 changes: 2 additions & 2 deletions bin/install_travis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# symengine's bin/install_travis.sh will install miniconda

export conda_pkgs="python=${PYTHON_VERSION} pip pytest setuptools gmp mpfr"
export conda_pkgs="python=${PYTHON_VERSION} pip pytest python-build scikit-build-core ninja cython-cmake cython setuptools-scm gmp mpfr"

if [[ "${WITH_NUMPY}" != "no" ]]; then
export conda_pkgs="${conda_pkgs} numpy";
Expand Down Expand Up @@ -31,7 +31,7 @@ if [[ "${WITH_SAGE}" == "yes" ]]; then
export conda_pkgs="${conda_pkgs} sage=8.1";
fi

conda install -q ${conda_pkgs} "cython>=0.29.24"
conda install -q ${conda_pkgs}

if [[ "${WITH_SYMPY}" != "no" ]]; then
pip install sympy;
Expand Down
11 changes: 6 additions & 5 deletions bin/test_travis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@ set -e
# Echo each command
set -x

python setup.py sdist
python -m build . --sdist
mkdir dist-extract
cd dist-extract
tar -xvf ../dist/symengine-*.tar.gz
cd symengine-*

# Build inplace so that nosetests can be run inside source directory
python3 setup.py install build_ext --inplace --symengine-dir=$our_install_dir

if [[ "${SYMENGINE_PY_LIMITED_API:-}" != "" ]]; then
# Build inplace
if [[ "${SYMENGINE_PY_LIMITED_API:-}" == "" ]]; then
python3 -m pip install -e . -vv -Ccmake.define.SymEngine_DIR=$our_install_dir
else
python3 -m pip install -e . -vv -Ccmake.define.SymEngine_DIR=$our_install_dir -Cwheel.py-api="cp${SYMENGINE_PY_LIMITED_API/./}"
python3 -m abi3audit --assume-minimum-abi3 ${SYMENGINE_PY_LIMITED_API} symengine/lib/symengine_wrapper.abi3.so -v
fi

Expand Down
93 changes: 0 additions & 93 deletions cmake/FindCython.cmake

This file was deleted.

Loading
Loading