mirror of
https://github.com/pybind/pybind11.git
synced 2026-03-14 20:27:47 +00:00
ci: update to GraalPy 24.2 and mention in README (#5586)
* ci: update to GraalPy 24.2 and mention in README Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * tests: update for GRAALPY 24.2 and better printout Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * tests: use __graalpython__ for version number Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * Update README.rst --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
7
.github/workflows/ci.yml
vendored
7
.github/workflows/ci.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
||||
- '3.13'
|
||||
- 'pypy-3.10'
|
||||
- 'pypy-3.11'
|
||||
- 'graalpy-24.1'
|
||||
- 'graalpy-24.2'
|
||||
|
||||
# Items in here will either be added to the build matrix (if not
|
||||
# present), or add new keys to an existing matrix element if all the
|
||||
@@ -95,9 +95,12 @@ jobs:
|
||||
python: '3.12'
|
||||
args: >
|
||||
-DCMAKE_CXX_FLAGS="/DPYBIND11_RUN_TESTING_WITH_SMART_HOLDER_AS_DEFAULT_BUT_NEVER_USE_IN_PRODUCTION_PLEASE /GR /EHsc"
|
||||
- python: 'graalpy-24.1'
|
||||
runs-on: 'ubuntu-latest'
|
||||
exclude:
|
||||
# The setup-python action currently doesn't have graalpy for windows
|
||||
- python: 'graalpy-24.1'
|
||||
# See https://github.com/actions/setup-python/pull/880
|
||||
- python: 'graalpy-24.2'
|
||||
runs-on: 'windows-2022'
|
||||
|
||||
|
||||
|
||||
17
README.rst
17
README.rst
@@ -34,12 +34,12 @@ dependency.
|
||||
Think of this library as a tiny self-contained version of Boost.Python
|
||||
with everything stripped away that isn't relevant for binding
|
||||
generation. Without comments, the core header files only require ~4K
|
||||
lines of code and depend on Python (3.8+, or PyPy) and the C++
|
||||
standard library. This compact implementation was possible thanks to
|
||||
some C++11 language features (specifically: tuples, lambda functions and
|
||||
variadic templates). Since its creation, this library has grown beyond
|
||||
Boost.Python in many ways, leading to dramatically simpler binding code in many
|
||||
common situations.
|
||||
lines of code and depend on Python (CPython 3.8+, PyPy, or GraalPy) and the C++
|
||||
standard library. This compact implementation was possible thanks to some C++11
|
||||
language features (specifically: tuples, lambda functions and variadic
|
||||
templates). Since its creation, this library has grown beyond Boost.Python in
|
||||
many ways, leading to dramatically simpler binding code in many common
|
||||
situations.
|
||||
|
||||
Tutorial and reference documentation is provided at
|
||||
`pybind11.readthedocs.io <https://pybind11.readthedocs.io/en/latest>`_.
|
||||
@@ -79,8 +79,9 @@ Goodies
|
||||
In addition to the core functionality, pybind11 provides some extra
|
||||
goodies:
|
||||
|
||||
- Python 3.8+, and PyPy3 7.3 are supported with an implementation-agnostic
|
||||
interface (pybind11 2.9 was the last version to support Python 2 and 3.5).
|
||||
- Python 3.8+, PyPy3 7.3.17+, and GraalPy 24.1+ are supported with an
|
||||
implementation-agnostic interface (pybind11 2.9 was the last version to
|
||||
support Python 2 and 3.5).
|
||||
|
||||
- It is possible to bind C++11 lambda functions with captured
|
||||
variables. The lambda capture data is stored inside the resulting
|
||||
|
||||
@@ -9,9 +9,11 @@ from __future__ import annotations
|
||||
import contextlib
|
||||
import difflib
|
||||
import gc
|
||||
import importlib.metadata
|
||||
import multiprocessing
|
||||
import re
|
||||
import sys
|
||||
import sysconfig
|
||||
import textwrap
|
||||
import traceback
|
||||
|
||||
@@ -210,16 +212,34 @@ def pytest_configure():
|
||||
pytest.gc_collect = gc_collect
|
||||
|
||||
|
||||
def pytest_report_header(config):
|
||||
del config # Unused.
|
||||
def pytest_report_header():
|
||||
assert pybind11_tests.compiler_info is not None, (
|
||||
"Please update pybind11_tests.cpp if this assert fails."
|
||||
)
|
||||
return (
|
||||
"C++ Info:"
|
||||
f" {pybind11_tests.compiler_info}"
|
||||
f" {pybind11_tests.cpp_std}"
|
||||
f" {pybind11_tests.PYBIND11_INTERNALS_ID}"
|
||||
f" PYBIND11_SIMPLE_GIL_MANAGEMENT={pybind11_tests.PYBIND11_SIMPLE_GIL_MANAGEMENT}"
|
||||
f" PYBIND11_NUMPY_1_ONLY={pybind11_tests.PYBIND11_NUMPY_1_ONLY}"
|
||||
)
|
||||
interesting_packages = ("pybind11", "numpy", "scipy", "build")
|
||||
valid = []
|
||||
for package in sorted(interesting_packages):
|
||||
with contextlib.suppress(ModuleNotFoundError):
|
||||
valid.append(f"{package}=={importlib.metadata.version(package)}")
|
||||
reqs = " ".join(valid)
|
||||
|
||||
cpp_info = [
|
||||
"C++ Info:",
|
||||
f"{pybind11_tests.compiler_info}",
|
||||
f"{pybind11_tests.cpp_std}",
|
||||
f"{pybind11_tests.PYBIND11_INTERNALS_ID}",
|
||||
f"PYBIND11_SIMPLE_GIL_MANAGEMENT={pybind11_tests.PYBIND11_SIMPLE_GIL_MANAGEMENT}",
|
||||
f"PYBIND11_NUMPY_1_ONLY={pybind11_tests.PYBIND11_NUMPY_1_ONLY}",
|
||||
]
|
||||
if "__graalpython__" in sys.modules:
|
||||
cpp_info.append(
|
||||
f"GraalPy version: {sys.modules['__graalpython__'].get_graalvm_version()}"
|
||||
)
|
||||
lines = [
|
||||
f"installed packages of interest: {reqs}",
|
||||
" ".join(cpp_info),
|
||||
]
|
||||
if sysconfig.get_config_var("Py_GIL_DISABLED"):
|
||||
lines.append("free-threaded Python build")
|
||||
|
||||
return lines
|
||||
|
||||
@@ -13,6 +13,10 @@ WIN = sys.platform.startswith("win32") or sys.platform.startswith("cygwin")
|
||||
CPYTHON = platform.python_implementation() == "CPython"
|
||||
PYPY = platform.python_implementation() == "PyPy"
|
||||
GRAALPY = sys.implementation.name == "graalpy"
|
||||
_graalpy_version = (
|
||||
sys.modules["__graalpython__"].get_graalvm_version() if GRAALPY else "0.0.0"
|
||||
)
|
||||
GRAALPY_VERSION = tuple(int(t) for t in _graalpy_version.split(".")[:3])
|
||||
PY_GIL_DISABLED = bool(sysconfig.get_config_var("Py_GIL_DISABLED"))
|
||||
|
||||
|
||||
|
||||
@@ -5,11 +5,13 @@ import re
|
||||
|
||||
import pytest
|
||||
|
||||
import env # noqa: F401
|
||||
import env
|
||||
from pybind11_tests import enums as m
|
||||
|
||||
|
||||
@pytest.mark.xfail("env.GRAALPY", reason="TODO should get fixed on GraalPy side")
|
||||
@pytest.mark.xfail(
|
||||
env.GRAALPY and env.GRAALPY_VERSION < (24, 2), reason="Fixed in GraalPy 24.2"
|
||||
)
|
||||
def test_unscoped_enum():
|
||||
assert str(m.UnscopedEnum.EOne) == "UnscopedEnum.EOne"
|
||||
assert str(m.UnscopedEnum.ETwo) == "UnscopedEnum.ETwo"
|
||||
@@ -197,7 +199,9 @@ def test_implicit_conversion():
|
||||
assert repr(x) == "{<EMode.EFirstMode: 1>: 3, <EMode.ESecondMode: 2>: 4}"
|
||||
|
||||
|
||||
@pytest.mark.xfail("env.GRAALPY", reason="TODO should get fixed on GraalPy side")
|
||||
@pytest.mark.xfail(
|
||||
env.GRAALPY and env.GRAALPY_VERSION < (24, 2), reason="Fixed in GraalPy 24.2"
|
||||
)
|
||||
def test_binary_operators():
|
||||
assert int(m.Flags.Read) == 4
|
||||
assert int(m.Flags.Write) == 2
|
||||
|
||||
@@ -88,7 +88,9 @@ def test_operator_overloading():
|
||||
assert cstats.move_assignments == 0
|
||||
|
||||
|
||||
@pytest.mark.xfail("env.GRAALPY", reason="TODO should get fixed on GraalPy side")
|
||||
@pytest.mark.xfail(
|
||||
env.GRAALPY and env.GRAALPY_VERSION < (24, 2), reason="Fixed in GraalPy 24.2"
|
||||
)
|
||||
def test_operators_notimplemented():
|
||||
"""#393: need to return NotSupported to ensure correct arithmetic operator behavior"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user