Binding for wood project that is compiled into a binding using nanobind and scikit-build
Project description
wood_nano
Repository wood_nano has submodule wood in src directly. For new clones incase there is nothing in the src/wood folder do the following:
-
git submodule update --init --recursive
CI | status |
---|---|
pip builds | |
wheels |
This repository contains a tiny project showing how to create C++ bindings using nanobind and scikit-build-core. It was derived from the corresponding pybind11 example project developed by @henryiii.
Installation
- Clone this repository
- Run
pip install ./wood_nano
Afterwards, you should be able to issue the following commands (shown in an interactive Python session):
>>> import nanobind_example
>>> nanobind_example.add(1, 2)
3
CI Examples
The .github/workflows
directory contains two continuous integration workflows
for GitHub Actions. The first one (pip
) runs automatically after each commit
and ensures that packages can be built successfully and that tests pass.
The wheels
workflow uses
cibuildwheel to automatically
produce binary wheels for a large variety of platforms. If a pypi_password
token is provided using GitHub Action's secrets feature, this workflow can
even automatically upload packages on PyPI.
License
nanobind and this example repository are both provided under a BSD-style license that can be found in the LICENSE file. By using, distributing, or contributing to this project, you agree to the terms and conditions of this license.
Customization
Conda
conda config --add channels conda-forge
conda create -n wood python==3.8.16 pypy=7.3.11
Rhino ScriptEditor
C:/Users/petras/.rhinocode/py39-rh8/python.exe -m pip install .
import os
import os.path as op
import sys
import ctypes
CONDA_ENV = r'C:\Users\petras\.conda\envs\wood'
COMPAS_WOOD_PATH = r'C:\brg\2_code\wood_nano\build\pp38-pypy38_pp73-win_amd64\Release'
sys.path.append(op.join(CONDA_ENV, r"Lib\site-packages"))
sys.path.append(COMPAS_WOOD_PATH)
os.add_dll_directory(op.join(CONDA_ENV, r'Library\bin'))
os.add_dll_directory(COMPAS_WOOD_PATH)
import nanobind_example
print(nanobind_example.add(1, 2))
Wood submodule and download dependecies
cd ~/brg/2_code/wood_nano/src
git submodule add https://github.com/petrasvestartas/wood.git
cd wood
sudo '/home/petras/brg/2_code/wood_nano/src/wood/install_ubuntu.sh'
For update:
git submodule foreach git pull origin main
sudo rm -r build
Link wood dependencies to nanobind
- Ubuntu - linked, Check: a) PCH is not speeding the build, b) SQL has no be unlocked like this
sudo chown -R
, be aware that the .sh file installs gmp and mpfr in ubuntu, not as a cmake source code. - Windows - linked, Check: a) C:\Users\petras.conda\envs\wood\Lib\site-packages\wood_nano must have cgal libgmp-10.dll and libmpfr-4.dll, it would be great that gmp and mpfr would be compiled together into one single .pyd file.
- Mac - not linked
pip
conda create -n compas_wood_3_9_10 python==3.9.10 build setuptools wheel twine auditwheel
ubuntu:
export BUILDING_DIST="1" && python -m build --wheel
sudo apt-get install patchelf
auditwheel repair dist/wood_nano-0.0.7-cp39-cp39-linux_x86_64.whl --plat manylinux_2_35_x86_64 -w dist/
windows:
conda create -n compas_wood_3_9_10 python==3.9.10 build setuptools wheel twine
python -m build --wheel
- upload to pip https://github.com/petrasvestartas/compas_snippets
Code wrapping
- for development you need to use pip install . and even you changed init.py
- function based on the EDX tutorial
- Process: - add c++ and binded method in nanobind_binding.cpp - run pip install -e . to check if there are no C++ mistake - import the method in src/wood_nano/init.py - test the imported method in tests/test_basic.py - compas_wood - create a file called src/compas_wood/binding/binding_read_xml_polylines.py - compas_wood - add this name in init.py - compas_wood - fill the contents of the file and create a test under if name == "main" - compas_wood - write docstrings under the method - compas_wood - invoke docs and check the result
compas_wood
conda config --add channels conda-forge
conda create -n compas_wood_3_9_10 python==3.9_10 compas
conda activate compas_wood_3_9_10
conda install build setuptools wheel twine
upload to pip https://github.com/petrasvestartas/compas_snippets
sudo apt install twine or conda install twine
cookiecutter gh:compas-dev/compas_package_template
export PATH="~/anaconda3/envs/compas_wood/bin:$PATH"
sudo apt install invoke
pip install -r requirements.txt
- add requirements wood-nano
- rewrite examples
- compas_wood must be installable by
pip install compas_wood
- documentation based on edx tutorials
- create compas_model with vizualization
- upload to pip https://github.com/petrasvestartas/compas_snippets
EDX
- answer comments
MAC GIT CONFLICT RESOLVE
python -m compas_rhino.print_python_path sudo -H /Users/petras/.rhinocode/py39-rh8/python3.9 -m pip install . sudo -H /Users/petras/.rhinocode/py39-rh8/python3.9 -m pip install . --use-feature=in-tree-build
In this case, the default message is pre-filled, but you can modify it if needed. To proceed with the merge and accept the default commit message, you can follow these steps:
Press i on your keyboard to enter insert mode in the text editor. Make any changes to the commit message if necessary. Once you're done, press Esc to exit insert mode. Type :wq to save the commit message and exit the text editor. If you're using Vim, this command writes the changes and quits the editor.
Open Rhino from Terminal
/Applications/Rhino\ 8.app/Contents/MacOS/Rhinoceros start "" "C:\Program Files\Rhino 8\System\Rhino.exe"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for wood_nano-0.1.1-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee3b6a632ae7aa2706ed9d90b2f8fe62f8fe18f4da64d2236de56cc28649dc7f |
|
MD5 | 9fbf6930a7ad3bc6c6e8e80eeab979ea |
|
BLAKE2b-256 | 52ea1d97b9aaec77332343a97fd16f0fcf20f3bd9f79e0e088bed16a6fc11f08 |
Hashes for wood_nano-0.1.1-cp39-cp39-macosx_14_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | baba261945d7f99163804dc6491bd3f0324291d24eadda095c6f272aa5f9d359 |
|
MD5 | b499684fa5ada081164bf552a453aa71 |
|
BLAKE2b-256 | 262039cda06bc8349015130b98aeee5e58098457952f2e1533261c55f7c6d6c7 |
Hashes for wood_nano-0.1.1-cp39-cp39-macosx_12_0_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a262941f787e31338f2527e0dc7cfb820cb8743891dfcbf65ca5763cfab1bd04 |
|
MD5 | dd2436d60e08f33146327529ebd5065a |
|
BLAKE2b-256 | a9b63c30542ea16fbf52989d789641d3eec7bf003d736c7b1f456ee94e77359e |